#
# Copyright The NOMAD Authors.
#
# This file is part of NOMAD.
# See https://nomad-lab.eu for further info.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import numpy as np            # pylint: disable=unused-import
import typing                 # pylint: disable=unused-import
from nomad.metainfo import (  # pylint: disable=unused-import
    MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy,
    Reference
)
from nomad.metainfo.legacy import LegacyDefinition

from nomad.datamodel.metainfo import public

m_package = Package(
    name='cp2k_nomadmetainfo_json',
    description='None',
    a_legacy=LegacyDefinition(name='cp2k.nomadmetainfo.json'))


class x_cp2k_section_input_ATOM_AE_BASIS_BASIS(MSection):
    '''
    Section used to specify a general basis set for QM calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.AE_BASIS.BASIS'))

    x_cp2k_input_ATOM_AE_BASIS_BASIS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K Basis Set Standard Format
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.BASIS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_ATOM_AE_BASIS(MSection):
    '''
    Section of basis set information for all-electron calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.AE_BASIS'))

    x_cp2k_input_ATOM_AE_BASIS_BASIS_SET_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.BASIS_SET_FILE_NAME'))

    x_cp2k_input_ATOM_AE_BASIS_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The contracted Gaussian basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.BASIS_SET'))

    x_cp2k_input_ATOM_AE_BASIS_BASIS_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Basis set type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.BASIS_TYPE'))

    x_cp2k_input_ATOM_AE_BASIS_D_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for d functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.D_EXPONENTS'))

    x_cp2k_input_ATOM_AE_BASIS_D_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for d functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.D_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_AE_BASIS_EPS_EIGENVALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff of overlap matrix eigenvalues included into basis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.EPS_EIGENVALUE'))

    x_cp2k_input_ATOM_AE_BASIS_F_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for f functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.F_EXPONENTS'))

    x_cp2k_input_ATOM_AE_BASIS_F_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for f functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.F_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_AE_BASIS_GEO_START_VALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Geometrical basis: starting value a in a*C^k
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.GEO_START_VALUE'))

    x_cp2k_input_ATOM_AE_BASIS_GEOMETRICAL_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Geometrical basis: factor C in a*C^k
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.GEOMETRICAL_FACTOR'))

    x_cp2k_input_ATOM_AE_BASIS_GRID_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of radial grid points
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.GRID_POINTS'))

    x_cp2k_input_ATOM_AE_BASIS_NUM_GTO = Quantity(
        type=str,
        shape=[],
        description='''
        Number of Gaussian type functions for s, p, d, ...
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.NUM_GTO'))

    x_cp2k_input_ATOM_AE_BASIS_NUM_SLATER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of Slater type functions for s, p, d, ...
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.NUM_SLATER'))

    x_cp2k_input_ATOM_AE_BASIS_P_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for p functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.P_EXPONENTS'))

    x_cp2k_input_ATOM_AE_BASIS_P_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for p functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.P_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_AE_BASIS_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to construct the atomic radial grids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.QUADRATURE'))

    x_cp2k_input_ATOM_AE_BASIS_S_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for s functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.S_EXPONENTS'))

    x_cp2k_input_ATOM_AE_BASIS_S_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for s functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.S_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_AE_BASIS_START_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Starting index for Geometrical Basis sets
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.AE_BASIS.START_INDEX'))

    x_cp2k_section_input_ATOM_AE_BASIS_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_AE_BASIS_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.AE_BASIS.BASIS'))


class x_cp2k_section_input_ATOM_METHOD_EXTERNAL_VXC(MSection):
    '''
    Section used to specify exernal VXC Potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.EXTERNAL_VXC'))

    x_cp2k_input_ATOM_METHOD_EXTERNAL_VXC_FILE_VXC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename containing the external vxc
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.EXTERNAL_VXC.FILE_VXC'))

    x_cp2k_input_ATOM_METHOD_EXTERNAL_VXC_GRID_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance in the equivalence of read-grid in ZMP method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.EXTERNAL_VXC.GRID_TOL'))


class x_cp2k_section_input_ATOM_METHOD_XC_ADIABATIC_RESCALING(MSection):
    '''
    Parameters for self interation corrected hybrid functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.ADIABATIC_RESCALING'))

    x_cp2k_input_ATOM_METHOD_XC_ADIABATIC_RESCALING_FUNCTIONAL_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        Which model for the coupling constant integration should be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.ADIABATIC_RESCALING.FUNCTIONAL_MODEL'))

    x_cp2k_input_ATOM_METHOD_XC_ADIABATIC_RESCALING_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which Hybrid functional should be used. (Has to be consistent with the definitions
        in XC and HF).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.ADIABATIC_RESCALING.FUNCTIONAL_TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_ADIABATIC_RESCALING_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        The point to be used along the adiabatic curve (0 &#60; λ &#60; 1)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.ADIABATIC_RESCALING.LAMBDA'))

    x_cp2k_input_ATOM_METHOD_XC_ADIABATIC_RESCALING_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Long-range parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.ADIABATIC_RESCALING.OMEGA'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.HF_INFO'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HF_INFO.FILENAME'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.HFX_RI'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_ATOM_METHOD_XC_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.LOAD_BALANCE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_ATOM_METHOD_XC_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.MEMORY'))

    x_cp2k_input_ATOM_METHOD_XC_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_ATOM_METHOD_XC_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_ATOM_METHOD_XC_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_ATOM_METHOD_XC_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.PERIODIC'))

    x_cp2k_input_ATOM_METHOD_XC_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.SCREENING'))

    x_cp2k_input_ATOM_METHOD_XC_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_ATOM_METHOD_XC_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_ATOM_METHOD_XC_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_ATOM_METHOD_XC_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_ATOM_METHOD_XC_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_ATOM_METHOD_XC_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF'))

    x_cp2k_input_ATOM_METHOD_XC_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.FRACTION'))

    x_cp2k_input_ATOM_METHOD_XC_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_ATOM_METHOD_XC_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.PW_HFX'))

    x_cp2k_input_ATOM_METHOD_XC_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.HF_INFO'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.HFX_RI'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.LOAD_BALANCE'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.MEMORY'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.PERIODIC'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF.SCREENING'))


class x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL(MSection):
    '''
    Information on the non local dispersion functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the FFT grid used in the calculation of the nonlocal vdW functional
        [Ry].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL.CUTOFF'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL_KERNEL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the kernel data file, may include a path.vdW_kernel_table.dat is for DRSLL
        and LMKLL andrVV10_kernel_table.dat is for rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL.KERNEL_FILE_NAME'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Parameters b and C of the rVV10 functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL.PARAMETERS'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of functional (the corresponding kernel data file should be selected).Allows
        for common forms such as vdW-DF, vdW-DF2, optB88-vdW, rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL.TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for non local functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL.VERBOSE_OUTPUT'))


class x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD(MSection):
    '''
    Controls the printing of some info about DFTD contributions
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.ADD_LAST'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.FILENAME'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.LOG_PRINT_KEY'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL(MSection):
    '''
    Information on the pair potential to calculate dispersion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOM_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number of a set of atoms for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOM_COORDINATION_NUMBERS'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOMPARM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies parameters for atom types (in atomic units). If not provided default
        parameters are used (DFT-D2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOMPARM'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_CALCULATE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.CALCULATE_C9_TERM'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,sr6,s8) for the DFT-D3 method, if
        set to zero CP2K attempts to guess the xc functional from REFERENCE_FUNCTIONAL and
        sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3_SCALING'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3BJ_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,a1,s8,a2) for the DFT-D3(BJ)
        method, if set to zero CP2K attempts to guess the xc functional from
        REFERENCE_FUNCTIONAL and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3BJ_SCALING'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EPS_CN = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff value for coordination number function (DFT-D3 method)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EPS_CN'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EXP_PRE = Quantity(
        type=str,
        shape=[],
        description='''
        Prefactor in exponential damping factor (DFT-D2 potential)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EXP_PRE'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_KIND_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number for a kind for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.KIND_COORDINATION_NUMBERS'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_LONG_RANGE_CORRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate a long range correction to the DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.LONG_RANGE_CORRECTION'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PARAMETER_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the parameter file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PARAMETER_FILE_NAME'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_R_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Range of potential. The cutoff will be 2 times this value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.R_CUTOFF'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model using reference coordination numbers
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_C9_TERM'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Use parameters for this specific density functional. For available D3 and D3(BJ)
        parameters see: http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionals.html,
        http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionalsbj.html
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameter, if set to zero CP2K attempts to guess
        the xc functional that is in use and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.SCALING'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for the DFT-D2 and DFT-D3 models
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.VERBOSE_OUTPUT'))

    x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))


class x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL(MSection):
    '''
    This section combines all possible additional dispersion corrections to the normal XC
    functionals. This can be more functionals or simple empirical pair potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_VDW_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of dispersion/vdW functional or potential to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.VDW_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_NON_LOCAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL_PAIR_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_CPHF(MSection):
    '''
    Parameters influencing the solution of the Z-vector equations in MP2 gradients
    calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.CPHF'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_CPHF_EPS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence threshold for the solution of the Z-vector equations. The Z-vector
        equations have the form of a linear system of equations Ax=b, convergence is
        achieved when |Ax-b|<=EPS_CONV.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.CPHF.EPS_CONV'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_CPHF_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations allowed for the solution of the Z-vector equations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.CPHF.MAX_ITER'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_DIRECT_CANONICAL(MSection):
    '''
    Parameters influencing the direct canonical method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_DIRECT_CANONICAL_BIG_SEND = Quantity(
        type=str,
        shape=[],
        description='''
        Send big messages between processes (useful for >48 processors).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.DIRECT_CANONICAL.BIG_SEND'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL(MSection):
    '''
    Parameters the interaction potential in computing the biel integrals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, TShPSC operator).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TRUNCATION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines truncation radius for the truncated TShPSC potential. Only valid when
        doing truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TRUNCATION_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TSHPSC_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file TShPSC.dat that contains the data for the evaluation of the
        TShPSC G0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TSHPSC_DATA'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO(MSection):
    '''
    Controls the printing basic info about MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO.ADD_LAST'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO.FILENAME'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS(MSection):
    '''
    Parameters influencing the optimization of the RI MP2 basis. Only exponents of non-
    contracted auxiliary basis can be optimized. An initial RI auxiliary basis has to be
    specified.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_BASIS_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the size of the auxiliary basis set automatically generated as initial
        guess. This will be effective only if RI_AUX_BASIS_SET in the KIND section and
        NUM_FUNC are not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.BASIS_SIZE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_I_REL = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the relative deviation of the amplitudes calculated with and
        without RI approximation, (more details in Chem.Phys.Lett.294(1998)143).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_I_REL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_RI = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the absolute difference between the RI-MP2 and the exact MP2
        energy, DRI=ABS(E_MP2-E_RI-MP2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_RI'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_EPS_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The derivatives of the MP2 energy with respect to the exponents of the basis are
        calculated numerically. The change in the exponent a_i employed for the numerical
        evaluation is defined as h_i=EPS_DERIV*a_i.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.EPS_DERIV'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of steps in the RI basis optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.MAX_ITER'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS_NUM_FUNC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of function, for each angular momentum (s, p, d ...),
        employed in the automatically generated initial guess. This will be effective only
        if RI_AUX_BASIS_SET in the KIND section is not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS.NUM_FUNC'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_LAPLACE(MSection):
    '''
    Parameters influencing the RI-SOS-MP2-Laplace method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_LAPLACE_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-SOS-
        MP2-Laplace method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_LAPLACE.QUADRATURE_POINTS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_LAPLACE_SIZE_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for the integration in the Laplace method, that is the number of
        processes involved in the computation of each integration point. SIZE_INTEG_GROUP
        has to be a multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1)
        is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_LAPLACE.SIZE_INTEG_GROUP'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2(MSection):
    '''
    Parameters influencing the RI MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for communication in RI-MP2. Larger BLOCK_SIZE
        reduces communication but requires more memory. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_MP2.BLOCK_SIZE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2_EPS_CANONICAL = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for discriminate if a given ij pairs of the unrelaxed MP2 density matrix
        has to be calculated with a canonical reformulation based on the occupied
        eigenvalues differences.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_MP2.EPS_CANONICAL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2_FREE_HFX_BUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Free the buffer containing the 4 center integrals used in the Hartree-Fock
        exchange calculation. This will be effective only for gradients calculations,
        since for the energy only case, the buffers are released by default. (Right now
        debugging only).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_MP2.FREE_HFX_BUFFER'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.FILENAME'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.FRACTION'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA(MSection):
    '''
    Parameters influencing the RI RPA method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_MINIMAX_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Use the Minimax quadrature scheme for performing the numerical integration.
        Maximum number of quadrature point limited to 20.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.MINIMAX_QUADRATURE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_MM_STYLE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix multiplication style for the Q matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.MM_STYLE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-RPA method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.QUADRATURE_POINTS'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_SIZE_FREQ_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for frequency integration, that is the number of processes involved in
        the computation of each integration point. SIZE_FREQ_INTEG_GROUP has to be a
        multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1) is
        automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.SIZE_FREQ_INTEG_GROUP'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA.HF'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW(MSection):
    '''
    Parameters for the GPW approach in Wavefunction-based Correlation methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the finest grid level in the MP2 gpw integration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW.CUTOFF'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the DBCSR based multiply (usually 10 times smaller than
        EPS_GRID).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW.EPS_FILTER'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW_EPS_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the GPW based integration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW.EPS_GRID'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW_PRINT_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        How much output is written by the individual groups.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW.PRINT_LEVEL'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the grid at which a Gaussian is mapped.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW.REL_CUTOFF'))


class x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION(MSection):
    '''
    Sets up the Wavefunction-based Correlation parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_CALC_COND_NUM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the condition number of the (P|Q) matrix for the RI methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.CALC_COND_NUM'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_COL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the column block used in the SCALAPACK block cyclic data
        distribution.Default is (COL_BLOCK=-1) is automatic. A proper choice can speedup
        the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.COL_BLOCK'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Group size used in the computation of the integrals. Default is to use all
        processors (GROUP_SIZE=-1).A smaller group size (for example the node size), might
        a better choice if the actual MP2 time is large compared to integral computation
        time. This is usually the case if the total number of processors is not too large.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.GROUP_SIZE'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed total memory usage during MP2 methods [Mb].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.MEMORY'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Which method should be used to compute the MP2 energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.METHOD'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_ROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the row block used in the SCALAPACK block cyclic data distribution.Default
        is (ROW_BLOCK=-1) is automatic. A proper choice can speedup the parallel matrix
        multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.ROW_BLOCK'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_SCALE_S = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the singlet energy component (opposite spin, OS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.SCALE_S'))

    x_cp2k_input_ATOM_METHOD_XC_WF_CORRELATION_SCALE_T = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the triplet energy component (same spin, SS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.WF_CORRELATION.SCALE_T'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_CPHF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_CPHF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.CPHF'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_DIRECT_CANONICAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_DIRECT_CANONICAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_MP2_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_OPT_RI_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_LAPLACE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_LAPLACE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_MP2'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_RI_RPA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION_WFC_GPW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION.WFC_GPW'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC(MSection):
    '''
    Uses the Becke 88 longrange exchange functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.LAMBDA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.OMEGA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR(MSection):
    '''
    Uses the Becke 88 longrange exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR.OMEGA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88(MSection):
    '''
    Uses the Becke 88 exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97(MSection):
    '''
    Uses the Becke 97 exchange correlation functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the B97 and Grimme parametrization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97.PARAMETRIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional, if -1 the default for the given
        parametrization is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL(MSection):
    '''
    Becke Roussel exchange hole model. Can be usedas long range correction with a
    truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff radius for the truncation. If put to zero, the standard full
        range potential will be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter in the exchange hole. Usually this is put to 1.0 or 0.8
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.GAMMA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BEEF(MSection):
    '''
    Uses the BEEFvdW exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BEEF_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BEEF.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BEEF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BEEF.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_CS1(MSection):
    '''
    Uses the CS1 functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_CS1_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.CS1.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09(MSection):
    '''
    Combination of three different exchange hole models
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for Becke Roussel hole
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09.GAMMA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_HCTH(MSection):
    '''
    Uses the HCTH class of functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_HCTH_PARAMETER_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the parameters should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.HCTH.PARAMETER_SET'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_HCTH_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.HCTH.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_GGA(MSection):
    '''
    Uses one of the KE_GGA functionals (optimized versions of some of these functionals
    might be available outside this section). These functionals are needed for the
    computation of the kinetic energy in the Kim-Gordon method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_GGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the KE_GGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_GGA.FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_GGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_GGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC(MSection):
    '''
    To be used for KG runs. Uses kinetic energy functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC.FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC.PARAMETERS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC.SCALE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR(MSection):
    '''
    LDA exchange hole model in truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC(MSection):
    '''
    Uses functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC.FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC.PARAMETERS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC.SCALE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_ADIABATIC(MSection):
    '''
    Uses the LYP correlation functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP_ADIABATIC.LAMBDA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP(MSection):
    '''
    Uses the LYP functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_OPTX(MSection):
    '''
    Uses the OPTX functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_OPTX_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.OPTX.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_OPTX_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.OPTX.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_P86C(MSection):
    '''
    Uses the P86C functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_P86C_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.P86C.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_P86C_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.P86C.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PADE(MSection):
    '''
    Uses the PADE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PADE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PADE.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR(MSection):
    '''
    PBE exchange hole model in trucanted coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE(MSection):
    '''
    Uses the PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the different parametrizations of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE.PARAMETRIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92(MSection):
    '''
    Uses the PerdewWang correlation functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PW92.PARAMETRIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the energy functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PW92.SCALE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PW92.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81(MSection):
    '''
    Uses the PZ functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PZ81.PARAMETRIZATION'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PZ81.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PZ81.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TFW(MSection):
    '''
    Uses the TFW functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TFW_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TFW.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TF(MSection):
    '''
    Uses the TF functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TF.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS(MSection):
    '''
    Uses the TPSS functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TPSS.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TPSS.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TPSS.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN(MSection):
    '''
    Uses the VWN functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the VWN functional should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.VWN.FUNCTIONAL_TYPE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.VWN.SCALE_C'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.VWN.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA(MSection):
    '''
    Uses the XALPHA (SLATER) functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XALPHA.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XALPHA.SECTION_PARAMETERS'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA_XA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the xa parameter (this does not change the exponent, just the mixing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XALPHA.XA'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XGGA(MSection):
    '''
    Uses one of the XGGA functionals (optimized versions of some of these functionals
    might be available outside this section).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XGGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the XGGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XGGA.FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XGGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XGGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE(MSection):
    '''
    Uses the short range PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        screening parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE.OMEGA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE_SCALE_X0 = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the original hole PBE-functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE.SCALE_X0'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE.SCALE_X'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL(MSection):
    '''
    The xc functional to use
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_FUNCTIONAL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Shortcut for the most common functional combinations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_FUNCTIONAL.SECTION_PARAMETERS'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE88'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE97'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BECKE_ROUSSEL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BEEF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_BEEF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_CS1 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_CS1'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_GV09'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_HCTH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_HCTH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_GGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_GGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_KE_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_LYP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_OPTX = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_OPTX'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_P86C = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_P86C'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PADE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PADE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PW92'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_PZ81'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TFW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TFW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_TPSS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_VWN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XALPHA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XGGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XGGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL_XWPBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL.XWPBE'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_GRID(MSection):
    '''
    The xc parameters used when calculating the xc on the grid
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_GRID'))

    x_cp2k_input_ATOM_METHOD_XC_XC_GRID_USE_FINER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a finer grid only to calculate the xc
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_GRID.USE_FINER_GRID'))

    x_cp2k_input_ATOM_METHOD_XC_XC_GRID_XC_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The method used to compute the derivatives
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_GRID.XC_DERIV'))

    x_cp2k_input_ATOM_METHOD_XC_XC_GRID_XC_SMOOTH_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        The density smoothing used for the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_GRID.XC_SMOOTH_RHO'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP(MSection):
    '''
    Uses the SAOP potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_POTENTIAL.SAOP'))

    x_cp2k_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the alpha parameter (default = 1.19).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_POTENTIAL.SAOP.ALPHA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the beta parameter (default = 0.01).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_POTENTIAL.SAOP.BETA'))

    x_cp2k_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP_K_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the K_rho parameter (default = 0.42).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_POTENTIAL.SAOP.K_RHO'))


class x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL(MSection):
    '''
    The xc potential to use (CAREFUL: xc potential here refers to potentials that are not
    derived from an xc functional, but rather are modelled directly. Therefore there is no
    consistent xc energy available. To still get an energy expression, see ENERGY below
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_POTENTIAL'))

    x_cp2k_input_ATOM_METHOD_XC_XC_POTENTIAL_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        How to determine the total energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.XC_POTENTIAL.ENERGY'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL_SAOP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_POTENTIAL.SAOP'))


class x_cp2k_section_input_ATOM_METHOD_XC(MSection):
    '''
    parameters needed calculate the xc potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC'))

    x_cp2k_input_ATOM_METHOD_XC_DENSITY_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.DENSITY_CUTOFF'))

    x_cp2k_input_ATOM_METHOD_XC_DENSITY_SMOOTH_CUTOFF_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for the smoothing procedure inxc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.DENSITY_SMOOTH_CUTOFF_RANGE'))

    x_cp2k_input_ATOM_METHOD_XC_FUNCTIONAL_ROUTINE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the code for xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.FUNCTIONAL_ROUTINE'))

    x_cp2k_input_ATOM_METHOD_XC_GRADIENT_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the gradient of the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.GRADIENT_CUTOFF'))

    x_cp2k_input_ATOM_METHOD_XC_TAU_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on tau used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.XC.TAU_CUTOFF'))

    x_cp2k_section_input_ATOM_METHOD_XC_ADIABATIC_RESCALING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_ADIABATIC_RESCALING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.ADIABATIC_RESCALING'))

    x_cp2k_section_input_ATOM_METHOD_XC_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.HF'))

    x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_VDW_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.VDW_POTENTIAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_WF_CORRELATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.WF_CORRELATION'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_FUNCTIONAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_FUNCTIONAL'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_GRID'))

    x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC_XC_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC.XC_POTENTIAL'))


class x_cp2k_section_input_ATOM_METHOD_ZMP_RESTART(MSection):
    '''
    Section used to specify the restart option in the ZMPprocedure, and the file that must
    be read.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.ZMP.RESTART'))

    x_cp2k_input_ATOM_METHOD_ZMP_RESTART_FILE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename containing the restart file density
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.ZMP.RESTART.FILE_RESTART'))


class x_cp2k_section_input_ATOM_METHOD_ZMP(MSection):
    '''
    Section used to specify ZMP Potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.ZMP'))

    x_cp2k_input_ATOM_METHOD_ZMP_DM = Quantity(
        type=str,
        shape=[],
        description='''
        read external density from density matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.ZMP.DM'))

    x_cp2k_input_ATOM_METHOD_ZMP_FILE_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename containing the target density
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.ZMP.FILE_DENSITY'))

    x_cp2k_input_ATOM_METHOD_ZMP_GRID_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance in the equivalence of read-grid in ZMP method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.ZMP.GRID_TOL'))

    x_cp2k_input_ATOM_METHOD_ZMP_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for the constraint in ZMP method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.ZMP.LAMBDA'))

    x_cp2k_section_input_ATOM_METHOD_ZMP_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_ZMP_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.ZMP.RESTART'))


class x_cp2k_section_input_ATOM_METHOD(MSection):
    '''
    Section of information on method to use.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD'))

    x_cp2k_input_ATOM_METHOD_METHOD_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of electronic structure method to be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.METHOD_TYPE'))

    x_cp2k_input_ATOM_METHOD_RELATIVISTIC = Quantity(
        type=str,
        shape=[],
        description='''
        Type of scalar relativistic method to be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.METHOD.RELATIVISTIC'))

    x_cp2k_section_input_ATOM_METHOD_EXTERNAL_VXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_EXTERNAL_VXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.EXTERNAL_VXC'))

    x_cp2k_section_input_ATOM_METHOD_XC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_XC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.XC'))

    x_cp2k_section_input_ATOM_METHOD_ZMP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD_ZMP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD.ZMP'))


class x_cp2k_section_input_ATOM_OPTIMIZATION(MSection):
    '''
    Section of information on optimization thresholds and algorithms.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.OPTIMIZATION'))

    x_cp2k_input_ATOM_OPTIMIZATION_DAMPING = Quantity(
        type=str,
        shape=[],
        description='''
        Damping parameter for extrapolation method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.OPTIMIZATION.DAMPING'))

    x_cp2k_input_ATOM_OPTIMIZATION_EPS_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Starting DIIS method at convergence to EPS_DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.OPTIMIZATION.EPS_DIIS'))

    x_cp2k_input_ATOM_OPTIMIZATION_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterion for SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.OPTIMIZATION.EPS_SCF'))

    x_cp2k_input_ATOM_OPTIMIZATION_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations for optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.OPTIMIZATION.MAX_ITER'))

    x_cp2k_input_ATOM_OPTIMIZATION_N_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of DIIS vectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.OPTIMIZATION.N_DIIS'))


class x_cp2k_section_input_ATOM_POTENTIAL_GTH_POTENTIAL(MSection):
    '''
    Section used to specify Potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POTENTIAL.GTH_POTENTIAL'))

    x_cp2k_input_ATOM_POTENTIAL_GTH_POTENTIAL_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K Pseudo Potential Standard Format (GTH, ALL or KG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POTENTIAL.GTH_POTENTIAL.DEFAULT_KEYWORD'))


class x_cp2k_section_input_ATOM_POTENTIAL(MSection):
    '''
    Section of information on potential.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POTENTIAL'))

    x_cp2k_input_ATOM_POTENTIAL_CONFINEMENT = Quantity(
        type=str,
        shape=[],
        description='''
        Definition of confinement potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POTENTIAL.CONFINEMENT'))

    x_cp2k_input_ATOM_POTENTIAL_POTENTIAL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the pseudo potential file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POTENTIAL.POTENTIAL_FILE_NAME'))

    x_cp2k_input_ATOM_POTENTIAL_POTENTIAL_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the pseudopotential for the defined kind.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POTENTIAL.POTENTIAL_NAME'))

    x_cp2k_input_ATOM_POTENTIAL_PSEUDO_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Pseudopotential type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POTENTIAL.PSEUDO_TYPE'))

    x_cp2k_section_input_ATOM_POTENTIAL_GTH_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_POTENTIAL_GTH_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POTENTIAL.GTH_POTENTIAL'))


class x_cp2k_section_input_ATOM_POWELL(MSection):
    '''
    Section defines basic parameters for Powell optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POWELL'))

    x_cp2k_input_ATOM_POWELL_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Final accuracy requested in optimization (RHOEND)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.ACCURACY'))

    x_cp2k_input_ATOM_POWELL_MAX_FUN = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of function evaluations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.MAX_FUN'))

    x_cp2k_input_ATOM_POWELL_RCOV_MULTIPLICATION = Quantity(
        type=str,
        shape=[],
        description='''
        Multiply Rcov integration limit for charge conservation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.RCOV_MULTIPLICATION'))

    x_cp2k_input_ATOM_POWELL_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size for search algorithm (RHOBEG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.STEP_SIZE'))

    x_cp2k_input_ATOM_POWELL_TARGET_POT_SEMICORE = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy for semicore state eigenvalues in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.TARGET_POT_SEMICORE'))

    x_cp2k_input_ATOM_POWELL_TARGET_POT_VALENCE = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy for valence state eigenvalues in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.TARGET_POT_VALENCE'))

    x_cp2k_input_ATOM_POWELL_TARGET_POT_VIRTUAL = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy for virtual state eigenvalues in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.TARGET_POT_VIRTUAL'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_ELECTRON_CONFIGURATION = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for different electronic states in optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_ELECTRON_CONFIGURATION'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for different methods in optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_METHOD'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_POT_NODE = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for node mismatch in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_POT_NODE'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_POT_SEMICORE = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for semi core states in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_POT_SEMICORE'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_POT_VALENCE = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for valence states in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_POT_VALENCE'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_POT_VIRTUAL = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for virtual states in pseudopotential optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_POT_VIRTUAL'))

    x_cp2k_input_ATOM_POWELL_WEIGHT_PSIR0 = Quantity(
        type=str,
        shape=[],
        description='''
        Weight for the wavefunctions at r=0 (only occupied states)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.POWELL.WEIGHT_PSIR0'))


class x_cp2k_section_input_ATOM_PP_BASIS_BASIS(MSection):
    '''
    Section used to specify a general basis set for QM calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.PP_BASIS.BASIS'))

    x_cp2k_input_ATOM_PP_BASIS_BASIS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K Basis Set Standard Format
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.BASIS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_ATOM_PP_BASIS(MSection):
    '''
    Section of basis set information for pseudopotential calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.PP_BASIS'))

    x_cp2k_input_ATOM_PP_BASIS_BASIS_SET_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.BASIS_SET_FILE_NAME'))

    x_cp2k_input_ATOM_PP_BASIS_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The contracted Gaussian basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.BASIS_SET'))

    x_cp2k_input_ATOM_PP_BASIS_BASIS_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Basis set type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.BASIS_TYPE'))

    x_cp2k_input_ATOM_PP_BASIS_D_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for d functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.D_EXPONENTS'))

    x_cp2k_input_ATOM_PP_BASIS_D_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for d functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.D_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_PP_BASIS_EPS_EIGENVALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff of overlap matrix eigenvalues included into basis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.EPS_EIGENVALUE'))

    x_cp2k_input_ATOM_PP_BASIS_F_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for f functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.F_EXPONENTS'))

    x_cp2k_input_ATOM_PP_BASIS_F_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for f functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.F_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_PP_BASIS_GEO_START_VALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Geometrical basis: starting value a in a*C^k
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.GEO_START_VALUE'))

    x_cp2k_input_ATOM_PP_BASIS_GEOMETRICAL_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Geometrical basis: factor C in a*C^k
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.GEOMETRICAL_FACTOR'))

    x_cp2k_input_ATOM_PP_BASIS_GRID_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of radial grid points
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.GRID_POINTS'))

    x_cp2k_input_ATOM_PP_BASIS_NUM_GTO = Quantity(
        type=str,
        shape=[],
        description='''
        Number of Gaussian type functions for s, p, d, ...
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.NUM_GTO'))

    x_cp2k_input_ATOM_PP_BASIS_NUM_SLATER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of Slater type functions for s, p, d, ...
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.NUM_SLATER'))

    x_cp2k_input_ATOM_PP_BASIS_P_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for p functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.P_EXPONENTS'))

    x_cp2k_input_ATOM_PP_BASIS_P_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for p functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.P_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_PP_BASIS_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to construct the atomic radial grids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.QUADRATURE'))

    x_cp2k_input_ATOM_PP_BASIS_S_EXPONENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents for s functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.S_EXPONENTS'))

    x_cp2k_input_ATOM_PP_BASIS_S_QUANTUM_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Main quantum numbers for s functions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.S_QUANTUM_NUMBERS'))

    x_cp2k_input_ATOM_PP_BASIS_START_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Starting index for Geometrical Basis sets
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.PP_BASIS.START_INDEX'))

    x_cp2k_section_input_ATOM_PP_BASIS_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_PP_BASIS_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.PP_BASIS.BASIS'))


class x_cp2k_section_input_ATOM(MSection):
    '''
    Section handling input for atomic calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM'))

    x_cp2k_input_ATOM_ATOMIC_NUMBER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the atomic number
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.ATOMIC_NUMBER'))

    x_cp2k_input_ATOM_CALCULATE_STATES = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of states calculated per l value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.CALCULATE_STATES'))

    x_cp2k_input_ATOM_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the core electrons for a pseudopotential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.CORE'))

    x_cp2k_input_ATOM_COULOMB_INTEGRALS = Quantity(
        type=str,
        shape=[],
        description='''
        Method to calculate Coulomb integrals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.COULOMB_INTEGRALS'))

    x_cp2k_input_ATOM_ELECTRON_CONFIGURATION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the electron configuration. Optional the multiplicity (m) and a core
        state [XX] can be declared
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.ELECTRON_CONFIGURATION'))

    x_cp2k_input_ATOM_ELEMENT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the element to be calculated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.ELEMENT'))

    x_cp2k_input_ATOM_EXCHANGE_INTEGRALS = Quantity(
        type=str,
        shape=[],
        description='''
        Method to calculate Exchange integrals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.EXCHANGE_INTEGRALS'))

    x_cp2k_input_ATOM_MAX_ANGULAR_MOMENTUM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the largest angular momentum calculated [0-3]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.MAX_ANGULAR_MOMENTUM'))

    x_cp2k_input_ATOM_RUN_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of run that you want to perform
        [ENERGY,BASIS_OPTIMIZATION,PSEUDOPOTENTIAL_OPTIMIZATION,,...]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_ATOM.RUN_TYPE'))

    x_cp2k_section_input_ATOM_AE_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_AE_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.AE_BASIS'))

    x_cp2k_section_input_ATOM_METHOD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_METHOD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.METHOD'))

    x_cp2k_section_input_ATOM_OPTIMIZATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_OPTIMIZATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.OPTIMIZATION'))

    x_cp2k_section_input_ATOM_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POTENTIAL'))

    x_cp2k_section_input_ATOM_POWELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_POWELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.POWELL'))

    x_cp2k_section_input_ATOM_PP_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM_PP_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM.PP_BASIS'))


class x_cp2k_section_input_DEBUG_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of the DEBUG specific output
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_DEBUG.PROGRAM_RUN_INFO'))

    x_cp2k_input_DEBUG_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_DEBUG_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_DEBUG_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_DEBUG_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_DEBUG_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_DEBUG(MSection):
    '''
    Section to setup parameters for debug runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_DEBUG'))

    x_cp2k_input_DEBUG_DEBUG_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Activates the debugging of the atomic forces
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.DEBUG_FORCES'))

    x_cp2k_input_DEBUG_DEBUG_STRESS_TENSOR = Quantity(
        type=str,
        shape=[],
        description='''
        Activates the debugging of the stress tensor
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.DEBUG_STRESS_TENSOR'))

    x_cp2k_input_DEBUG_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Increment for the calculation of the numerical derivatives
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.DX'))

    x_cp2k_input_DEBUG_EPS_NO_ERROR_CHECK = Quantity(
        type=str,
        shape=[],
        description='''
        The mismatch between the numerical and the analytical value is not checked for
        analytical values smaller than this threshold value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.EPS_NO_ERROR_CHECK'))

    x_cp2k_input_DEBUG_STOP_ON_MISMATCH = Quantity(
        type=str,
        shape=[],
        description='''
        Stop the debug run when a mismatch between the numerical and the analytical value
        is detected
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_DEBUG.STOP_ON_MISMATCH'))

    x_cp2k_section_input_DEBUG_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_DEBUG_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_DEBUG.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_EXT_RESTART(MSection):
    '''
    Section for external restart, specifies an external input file where to take
    positions,...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_EXT_RESTART'))

    x_cp2k_input_EXT_RESTART_BINARY_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of an additional restart file from which selected input
        sections are read in binary format (see SPLIT_RESTART_FILE).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.BINARY_RESTART_FILE_NAME'))

    x_cp2k_input_EXT_RESTART_CUSTOM_PATH = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the given path from the EXTERNAL file. Allows a major flexibility for
        restarts.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.CUSTOM_PATH'))

    x_cp2k_input_EXT_RESTART_RESTART_AVERAGES = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts information for AVERAGES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_AVERAGES'))

    x_cp2k_input_EXT_RESTART_RESTART_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts positions and velocities of the Band.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_BAND'))

    x_cp2k_input_EXT_RESTART_RESTART_BAROSTAT_THERMOSTAT = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the barostat thermostat from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_BAROSTAT_THERMOSTAT'))

    x_cp2k_input_EXT_RESTART_RESTART_BAROSTAT = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the barostat from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_BAROSTAT'))

    x_cp2k_input_EXT_RESTART_RESTART_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts information for BSSE calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_BSSE'))

    x_cp2k_input_EXT_RESTART_RESTART_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the cell (and cell_ref) from the EXTERNAL file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_CELL'))

    x_cp2k_input_EXT_RESTART_RESTART_CONSTRAINT = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts constraint section. It's necessary when doing restraint calculation to
        have a perfect energy conservation. For constraints only it's use is optional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_CONSTRAINT'))

    x_cp2k_input_EXT_RESTART_RESTART_CORE_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the positions of the cores from the external file (only if shell-model)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_CORE_POS'))

    x_cp2k_input_EXT_RESTART_RESTART_CORE_VELOCITY = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the velocities of the shells from the external file (only if shell-model)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_CORE_VELOCITY'))

    x_cp2k_input_EXT_RESTART_RESTART_COUNTERS = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the counters in MD schemes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_COUNTERS'))

    x_cp2k_input_EXT_RESTART_RESTART_DEFAULT = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword controls the default value for all possible  restartable keywords,
        unless explicitly defined. For example setting this keyword to .FALSE. does not
        restart any quantity. If, at the  same time, one keyword is set to .TRUE. only
        that quantity will be restarted.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_DEFAULT'))

    x_cp2k_input_EXT_RESTART_RESTART_DIMER = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts information for DIMER geometry optimizations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_DIMER'))

    x_cp2k_input_EXT_RESTART_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of restart file (or any other input file) to be read. Only
        fields relevant to a restart will be used (unless switched off with the keywords
        in this section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_FILE_NAME'))

    x_cp2k_input_EXT_RESTART_RESTART_HELIUM_DENSITIES = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts helium density distributions from PINT%HELIUM%RHO.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_HELIUM_DENSITIES'))

    x_cp2k_input_EXT_RESTART_RESTART_HELIUM_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Restart helium forces exerted on the solute from PINT%HELIUM%FORCE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_HELIUM_FORCE'))

    x_cp2k_input_EXT_RESTART_RESTART_HELIUM_PERMUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        Restart helium permutation state from PINT%HELIUM%PERM.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_HELIUM_PERMUTATION'))

    x_cp2k_input_EXT_RESTART_RESTART_HELIUM_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Restart helium positions from PINT%HELIUM%COORD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_HELIUM_POS'))

    x_cp2k_input_EXT_RESTART_RESTART_HELIUM_RNG = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts helium random number generators from PINT%HELIUM%RNG_STATE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_HELIUM_RNG'))

    x_cp2k_input_EXT_RESTART_RESTART_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts hills from a previous metadynamics run from the EXTERNAL file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_METADYNAMICS'))

    x_cp2k_input_EXT_RESTART_RESTART_OPTIMIZE_INPUT_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Restart with the optimize input variables
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_OPTIMIZE_INPUT_VARIABLES'))

    x_cp2k_input_EXT_RESTART_RESTART_PINT_GLE = Quantity(
        type=str,
        shape=[],
        description='''
        Restart GLE thermostat for beads from PINT%GLE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_PINT_GLE'))

    x_cp2k_input_EXT_RESTART_RESTART_PINT_NOSE = Quantity(
        type=str,
        shape=[],
        description='''
        Restart Nose thermostat for beads from PINT%NOSE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_PINT_NOSE'))

    x_cp2k_input_EXT_RESTART_RESTART_PINT_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Restart bead positions from PINT%BEADS%COORD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_PINT_POS'))

    x_cp2k_input_EXT_RESTART_RESTART_PINT_VEL = Quantity(
        type=str,
        shape=[],
        description='''
        Restart bead velocities from PINT%BEADS%VELOCITY.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_PINT_VEL'))

    x_cp2k_input_EXT_RESTART_RESTART_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the positions from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_POS'))

    x_cp2k_input_EXT_RESTART_RESTART_QMMM = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the following specific QMMM info: translation vectors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_QMMM'))

    x_cp2k_input_EXT_RESTART_RESTART_RANDOMG = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the random number generator from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_RANDOMG'))

    x_cp2k_input_EXT_RESTART_RESTART_RTP = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts information for REAL TIME PROPAGATION and EHRENFEST DYNAMICS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_RTP'))

    x_cp2k_input_EXT_RESTART_RESTART_SHELL_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the positions of the shells from the external file (only if shell-model)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_SHELL_POS'))

    x_cp2k_input_EXT_RESTART_RESTART_SHELL_THERMOSTAT = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the shell thermostat from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_SHELL_THERMOSTAT'))

    x_cp2k_input_EXT_RESTART_RESTART_SHELL_VELOCITY = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the velocities of the shells from the external file (only if shell-model)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_SHELL_VELOCITY'))

    x_cp2k_input_EXT_RESTART_RESTART_THERMOSTAT = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts the nose thermostats of the particles from the EXTERNAL file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_THERMOSTAT'))

    x_cp2k_input_EXT_RESTART_RESTART_VEL = Quantity(
        type=str,
        shape=[],
        description='''
        Takes the velocities from the external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_VEL'))

    x_cp2k_input_EXT_RESTART_RESTART_WALKERS = Quantity(
        type=str,
        shape=[],
        description='''
        Restarts walkers informations from a previous metadynamics run from the EXTERNAL
        file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_EXT_RESTART.RESTART_WALKERS'))


class x_cp2k_section_input_FARMING_JOB(MSection):
    '''
    description of the jobs to be executed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.JOB'))

    x_cp2k_input_FARMING_JOB_DEPENDENCIES = Quantity(
        type=str,
        shape=[],
        description='''
        specifies a list of JOB_IDs on which the current job depends. The current job will
        not be executed before all the dependencies have finished. The keyword requires a
        MASTER_SLAVE farming run. Beyond the default case, some special cases might arise:
        1) circular dependencies will lead to a deadlock. 2) This keyword is not
        compatible with CYCLE. 3) MAX_JOBS_PER_GROUP is ignored (though only a total of
        MAX_JOBS_PER_GROUP*NGROUPS jobs will be executed) 4) dependencies on jobs that
        will not be executed (due to RESTART or MAX_JOBS_PER_GROUP) are ignored.
        Additionally, note that, on some file systems,  output (restart) files might not
        be immediately available on all compute nodes,potentially resulting in unexpected
        failures.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.JOB.DEPENDENCIES'))

    x_cp2k_input_FARMING_JOB_DIRECTORY = Quantity(
        type=str,
        shape=[],
        description='''
        the directory in which the job should be executed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.JOB.DIRECTORY'))

    x_cp2k_input_FARMING_JOB_INPUT_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the input file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.JOB.INPUT_FILE_NAME'))

    x_cp2k_input_FARMING_JOB_JOB_ID = Quantity(
        type=str,
        shape=[],
        description='''
        An ID used to indentify a job in DEPENDENCIES. JOB_IDs do not need to be unique,
        dependencies will be on all jobs with a given ID. If no JOB_ID is given, the index
        of the &JOB section in the input file will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.JOB.JOB_ID'))

    x_cp2k_input_FARMING_JOB_OUTPUT_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the output file, if not specified will use the project name in the
        &GLOBAL section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.JOB.OUTPUT_FILE_NAME'))


class x_cp2k_section_input_FARMING_PROGRAM_RUN_INFO(MSection):
    '''
    controls the printing of FARMING specific output
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.PROGRAM_RUN_INFO'))

    x_cp2k_input_FARMING_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FARMING_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FARMING_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FARMING_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FARMING_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FARMING_RESTART(MSection):
    '''
    controls the printing of the restart for FARMING.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.RESTART'))

    x_cp2k_input_FARMING_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART.ADD_LAST'))

    x_cp2k_input_FARMING_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FARMING_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART.FILENAME'))

    x_cp2k_input_FARMING_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_FARMING_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_FARMING(MSection):
    '''
    Describes a farming job, in which multiple inputs are executed.

    The RUN_TYPE in the global section has to be set to NONE for FARMING.

    The different groups are executed in parallel. The jobs inside the same groups in
    series.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING'))

    x_cp2k_input_FARMING_CYCLE = Quantity(
        type=str,
        shape=[],
        description='''
        If farming should process all jobs in a cyclic way, stopping only if
        MAX_JOBS_PER_GROUP is exceeded.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.CYCLE'))

    x_cp2k_input_FARMING_DO_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart a farming job (and should pick up where the previous left off)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.DO_RESTART'))

    x_cp2k_input_FARMING_GROUP_PARTITION = Quantity(
        type=str,
        shape=[],
        description='''
        gives the exact number of processors for each group.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.GROUP_PARTITION'))

    x_cp2k_input_FARMING_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Gives the preferred size of a working group, groups will always be equal or larger
        than this size.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.GROUP_SIZE'))

    x_cp2k_input_FARMING_MASTER_SLAVE = Quantity(
        type=str,
        shape=[],
        description='''
        If a master-slave setup should be employed, in which one process is used to
        distribute the tasks. This is most useful to load-balance if not all jobs have the
        same length, and a lot of CPUs/groups are availabe.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.MASTER_SLAVE'))

    x_cp2k_input_FARMING_MAX_JOBS_PER_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        maximum number of jobs executed per group
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.MAX_JOBS_PER_GROUP'))

    x_cp2k_input_FARMING_NGROUPS = Quantity(
        type=str,
        shape=[],
        description='''
        Gives the preferred number of working groups.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.NGROUPS'))

    x_cp2k_input_FARMING_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the restart file to use for restarting a FARMING run. If not specified the
        name is determined from PROJECT name.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.RESTART_FILE_NAME'))

    x_cp2k_input_FARMING_WAIT_TIME = Quantity(
        type=str,
        shape=[],
        description='''
        Time to wait [s] for a new task if no task is currently available, make this zero
        if no clock is available
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FARMING.WAIT_TIME'))

    x_cp2k_section_input_FARMING_JOB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FARMING_JOB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.JOB'))

    x_cp2k_section_input_FARMING_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FARMING_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_FARMING_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FARMING_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING.RESTART'))


class x_cp2k_section_input_FORCE_EVAL_BSSE_CONFIGURATION(MSection):
    '''
    Specify additional parameters for the combinatorial configurations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.CONFIGURATION'))

    x_cp2k_input_FORCE_EVAL_BSSE_CONFIGURATION_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        The total charge for each fragment.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.CONFIGURATION.CHARGE'))

    x_cp2k_input_FORCE_EVAL_BSSE_CONFIGURATION_GLB_CONF = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the global configuration using 1 or 0.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.CONFIGURATION.GLB_CONF'))

    x_cp2k_input_FORCE_EVAL_BSSE_CONFIGURATION_MULTIPLICITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specify for each fragment the multiplicity. Two times the total spin plus one.
        Specify 3 for a triplet, 4 for a quartet,and so on. Default is 1 (singlet) for an
        even number and 2 (doublet) for an odd number of electrons.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.CONFIGURATION.MULTIPLICITY'))

    x_cp2k_input_FORCE_EVAL_BSSE_CONFIGURATION_SUB_CONF = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the subconfiguration using 1 or 0 belonging to the global configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.CONFIGURATION.SUB_CONF'))


class x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT_ENERGIES(MSection):
    '''
    This section contains the energies of the fragments already computed. It is useful as
    a summary and specifically for restarting BSSE runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.FRAGMENT_ENERGIES'))

    x_cp2k_input_FORCE_EVAL_BSSE_FRAGMENT_ENERGIES_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The energy computed for each fragment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.FRAGMENT_ENERGIES.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT(MSection):
    '''
    Specify the atom number belonging to this fragment.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.FRAGMENT'))

    x_cp2k_input_FORCE_EVAL_BSSE_FRAGMENT_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.BSSE.FRAGMENT.LIST'))


class x_cp2k_section_input_FORCE_EVAL_BSSE(MSection):
    '''
    This section is used to set up the BSSE calculation. It also requires that for each
    atomic kind X a kind X_ghost is present, with the GHOST keyword specified, in addition
    to the other required fields.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE'))

    x_cp2k_section_input_FORCE_EVAL_BSSE_CONFIGURATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_BSSE_CONFIGURATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.CONFIGURATION'))

    x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT_ENERGIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT_ENERGIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.FRAGMENT_ENERGIES'))

    x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_BSSE_FRAGMENT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE.FRAGMENT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS(MSection):
    '''
    Controls the iterative DIIS-accelerated optimization of block-diagonal ALMOs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS_EPS_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the MAX norm of the error
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_DIIS.EPS_ERROR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_DIIS.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS_N_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of error vectors to be used in the DIIS optimization procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_DIIS.N_DIIS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG(MSection):
    '''
    Controls the PCG optimization of block-diagonal ALMOs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_CONJUGATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Various methods to compute step directions in the PCG optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.CONJUGATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_EPS_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the MAX norm of the error
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.EPS_ERROR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_LIN_SEARCH_EPS_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the gradient norm during the linear search
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.LIN_SEARCH_EPS_ERROR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_LIN_SEARCH_STEP_SIZE_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        The size of the first step in the linear search
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.LIN_SEARCH_STEP_SIZE_GUESS'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_MAX_ITER_OUTER_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in the outer loop. Use the outer loop to update the
        preconditioner and reset the conjugator. This can speed up convergence
        significantly.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.MAX_ITER_OUTER_LOOP'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Select a preconditioner for the conjugate gradient optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG.PRECONDITIONER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG(MSection):
    '''
    Controls the PCG optimization of extended ALMOs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_CONJUGATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Various methods to compute step directions in the PCG optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.CONJUGATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_EPS_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the MAX norm of the error
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.EPS_ERROR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_LIN_SEARCH_EPS_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the gradient norm during the linear search
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.LIN_SEARCH_EPS_ERROR'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_LIN_SEARCH_STEP_SIZE_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        The size of the first step in the linear search
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.LIN_SEARCH_STEP_SIZE_GUESS'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_MAX_ITER_OUTER_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in the outer loop. Use the outer loop to update the
        preconditioner and reset the conjugator. This can speed up convergence
        significantly.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.MAX_ITER_OUTER_LOOP'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Select a preconditioner for the conjugate gradient optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG.PRECONDITIONER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF(MSection):
    '''
    Settings for a class of efficient linear scaling methods based on absolutely localized
    orbitals (ALMOs). ALMO methods are currently restricted to closed-shell molecular
    systems.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the algorithm to update block-diagonal ALMOs during the SCF procedure.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_SCF_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        The method to generate initial ALMOs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_SCF_GUESS'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_DELOCALIZE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Methods to reintroduce electron delocalization, which is excluded with the block-
        diagonal ALMO reference. Electron delocalization can be computed using either
        fully delocalized MOs or spatially restricted ALMOs (called extended ALMOs or
        XALMOs). All methods below use a PCG optimizer controlled by XALMO_OPTIMIZER_PCG.
        The only exception is the non-iterative XALMO_1DIAG.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.DELOCALIZE_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for the matrix sparsity filter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.EPS_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_R_CUTOFF_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the localization radius of XALMOs: R_cutoff =
        XALMO_R_CUTOFF_FACTOR*(radius(at1)+radius(at2))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_R_CUTOFF_FACTOR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_DIIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_DIIS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_ALMO_OPTIMIZER_PCG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.ALMO_OPTIMIZER_PCG'))

    x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF_XALMO_OPTIMIZER_PCG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF.XALMO_OPTIMIZER_PCG'))


class x_cp2k_section_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD(MSection):
    '''
    Parameters needed for the ADMM method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_ADMM_PURIFICATION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method that shall be used for wavefunction fitting. Use MO_DIAG for MD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.ADMM_PURIFICATION_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_BLOCK_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.BLOCK_LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Define accuracy of DBCSR operations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.EPS_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_EXCH_CORRECTION_FUNC = Quantity(
        type=str,
        shape=[],
        description='''
        Exchange functional which is used for the ADMM correction.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.EXCH_CORRECTION_FUNC'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_EXCH_SCALING_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the exchange correction calculated by the auxiliary density matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.EXCH_SCALING_MODEL'))

    x_cp2k_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method that shall be used for wavefunction fitting. Use BASIS_PROJECTION for MD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD.METHOD'))


class x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information during the run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_CONDITION_NUMBER = Quantity(
        type=str,
        shape=[],
        description='''
        Prints information regarding the condition numbers of the A matrix (to be
        inverted)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.CONDITION_NUMBER'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING(MSection):
    '''
    Setup parameters for density fitting (Bloechl charges or density derived  atomic point
    charges (DDAPC) charges)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.DENSITY_FITTING'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_GCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff for charge fit in G-space.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.GCUT'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_MIN_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the smallest radius of the gaussian used in the fit. All other radius
        are obtained with the progression factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.MIN_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_NUM_GAUSS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of gaussian used to fit the QM density for each atomic site.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.NUM_GAUSS'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_PFACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the progression factor for the gaussian exponent for each atomic site.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.PFACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_DENSITY_FITTING_RADII = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies all the radius of the gaussian used in the fit for each atomic site. The
        use of this keyword disables all other keywords of this section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.DENSITY_FITTING.RADII'))

    x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.DENSITY_FITTING.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_CONSTANT_ENV(MSection):
    '''
    parameters for a constant envelop
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.CONSTANT_ENV'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_CONSTANT_ENV_END_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Last step the field is applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.CONSTANT_ENV.END_STEP'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_CONSTANT_ENV_START_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        First step the field is applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.CONSTANT_ENV.START_STEP'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_GAUSSIAN_ENV(MSection):
    '''
    parameters for a gaussian envelop
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.GAUSSIAN_ENV'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_GAUSSIAN_ENV_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Width of the gaussian
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.GAUSSIAN_ENV.SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_GAUSSIAN_ENV_T0 = Quantity(
        type=str,
        shape=[],
        description='''
        Center of the gaussian envelop (maximum of the gaussian)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.GAUSSIAN_ENV.T0'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV(MSection):
    '''
    Parameters for an trapeziodal envelop
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV_END_STEP_IN = Quantity(
        type=str,
        shape=[],
        description='''
        Step when the field reaches the full strength
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV.END_STEP_IN'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV_END_STEP_OUT = Quantity(
        type=str,
        shape=[],
        description='''
        Step when the field disappears
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV.END_STEP_OUT'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV_START_STEP_IN = Quantity(
        type=str,
        shape=[],
        description='''
        Step when the electric field starts to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV.START_STEP_IN'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV_START_STEP_OUT = Quantity(
        type=str,
        shape=[],
        description='''
        Step when the field starts to vanish
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV.START_STEP_OUT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD(MSection):
    '''
    parameters for finite, time dependent, nonperiodic electric fields
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_ENVELOP = Quantity(
        type=str,
        shape=[],
        description='''
        Shape of the efield pulse
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.ENVELOP'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_INTENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Intensity of the electric field in W*cm-2 which corresponds to a maximal amplitude
        in a.u. of sqrt(I/(3.50944*10^16))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.INTENSITY'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_PHASE = Quantity(
        type=str,
        shape=[],
        description='''
        phase offset of the cosine given in multiples of pi
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.PHASE'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_POLARISATION = Quantity(
        type=str,
        shape=[],
        description='''
        Polarisation vector of electric field
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.POLARISATION'))

    x_cp2k_input_FORCE_EVAL_DFT_EFIELD_WAVELENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Wavelength of efield field
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EFIELD.WAVELENGTH'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_CONSTANT_ENV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_CONSTANT_ENV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.CONSTANT_ENV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_GAUSSIAN_ENV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_GAUSSIAN_ENV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.GAUSSIAN_ENV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD_RAMP_ENV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD.RAMP_ENV'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY(MSection):
    '''
    Section for the use of the ZMP technique on external densities.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY_FERMI_AMALDI = Quantity(
        type=str,
        shape=[],
        description='''
        Add the Fermi-Amaldi contribution to the Hartree potential.It leads to a more
        stable convergence.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY.FERMI_AMALDI'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY_FILE_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename containing the target density in *.cube format.In the MGRID
        section it must be imposed NGRID 1, as it works with onlyone grid. The number of
        points in each direction, and the spacing mustbe previously defined choosing the
        plane waves cut-off in section MGRIDkeyword CUTOFF, and the cube dimention in
        section SUBSYS / CELL / keyword ABC
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY.FILE_DENSITY'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Lagrange multiplier defined in the constraint ZMP method. When starting, usesmall
        values when starting from scratch (around 5,10). Then gradually increasethe values
        depending, restarting from the previous calculation with the smallervalue. To
        choose the progressive values of LAMBDA look at the convergence of the
        eigenvalues.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY_ZMP_CONSTRAINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of constraint to solve the ZMP equation. The COULOMB
        defaultoption is more stable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY.ZMP_CONSTRAINT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL(MSection):
    '''
    Section controlling the presence of an electrostatic external potential dependent on
    the atomic positions (X,Y,Z)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.DX'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation. Variables must be the
        atomic coordinates (X,Y,Z) of the grid.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_READ_FROM_CUBE = Quantity(
        type=str,
        shape=[],
        description='''
        Switch for reading the external potential from file pot.cube. The values of the
        potential must be on the grid points of the realspace grid.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.READ_FROM_CUBE'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_SCALING_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A factor for scaling the the external potential that is read from file.The value
        of the potential at each grid point is multiplied by this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.SCALING_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_STATIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the external potential as STATIC or time dependent. At the moment only
        static potentials are implemented.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.STATIC'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.UNITS'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL.VALUES'))


class x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_VXC(MSection):
    '''
    SCF convergence with external v_xc calculated through previous ZMPcalculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_VXC'))

    x_cp2k_input_FORCE_EVAL_DFT_EXTERNAL_VXC_FILE_VXC = Quantity(
        type=str,
        shape=[],
        description='''
        The *.cube filename containing the v_xc potential. This works onlywith NGRID 1
        imposed in the MGRID section. The number of points in eachdirection, and the
        spacing must equal to those previously used in the ZMPcalculation and defined
        through the plane wave cut-off and the cube dimensionrespectively set in section
        MGRID / keyword CUTOFF, and in section SUBSYS /CELL / keyword ABC
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXTERNAL_VXC.FILE_VXC'))


class x_cp2k_section_input_FORCE_EVAL_DFT_KG_METHOD(MSection):
    '''
    Specifies the parameters for a Kim-Gordon-like partitioning into molecular subunits
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.KG_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_KG_METHOD_COLORING_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Which algorithm to use for coloring.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KG_METHOD.COLORING_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_KG_METHOD_TNADD_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to use for the calculation of the nonadditive kinetic energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KG_METHOD.TNADD_METHOD'))


class x_cp2k_section_input_FORCE_EVAL_DFT_KPOINTS(MSection):
    '''
    Sets up the kpoints.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.KPOINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_EPS_GEO = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy in symmetry determination.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.EPS_GEO'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_FULL_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Use full non-reduced kpoint grid.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.FULL_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_KPOINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify kpoint coordinates and weight.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.KPOINT'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_PARALLEL_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Number of processors to be used for a single kpoint. Value=-1 (minimum number of
        processes). Value=0 (maximum number of processes). Value=n (exactly n processes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.PARALLEL_GROUP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_SCHEME = Quantity(
        type=str,
        shape=[],
        description='''
        Kpoint scheme to be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.SCHEME'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Use symmetry to reduce the number of kpoints.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.SYMMETRY'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_VERBOSE = Quantity(
        type=str,
        shape=[],
        description='''
        Verbose output information.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.VERBOSE'))

    x_cp2k_input_FORCE_EVAL_DFT_KPOINTS_WAVEFUNCTIONS = Quantity(
        type=str,
        shape=[],
        description='''
        Use real/complex wavefunctions if possible.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.KPOINTS.WAVEFUNCTIONS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LOCALIZE(MSection):
    '''
    Use one of the available methods to define the localization  and possibly to optimize
    it to a minimum or a maximum.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LOCALIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_CRAZY_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scale angles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.CRAZY_SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_CRAZY_USE_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Use diagonalization (slow) or pade based calculation of matrix exponentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.CRAZY_USE_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_ENERGY_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the orbitals to be localized within the given energy range.This type of
        selection cannot be added on top of the selection through a LIST. It reads to
        reals that are lower and higher boundaries of the energy range.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.ENERGY_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_EPS_LOCALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance used in the convergence criterium of the localization methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.EPS_LOCALIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_EPS_OCCUPATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance in the occupation number to select only fully occupied orbitals for the
        rotation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.EPS_OCCUPATION'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_JACOBI_FALLBACK = Quantity(
        type=str,
        shape=[],
        description='''
        Use Jacobi method in case no convergence was achieved by using the crazy rotations
        method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.JACOBI_FALLBACK'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_LIST_UNOCCUPIED = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the unoccupied states to be localized, up to now only valid in
        combination with GPW. This keyword has to be present if unoccupied states should
        be localized. This keyword can be repeated several times(useful if you have to
        specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.LIST_UNOCCUPIED'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the occupied wfn to be localizedThis keyword can be repeated several
        times(useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_LOCHOMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for occupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.LOCHOMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_LOCLUMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for unoccupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.LOCLUMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_MAX_CRAZY_ANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Largest allowed angle for the crazy rotations algorithm (smaller is slower but
        more stable).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.MAX_CRAZY_ANGLE'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations used for localization methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method of optimization if any
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_MIN_OR_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Requires the maximization of the spread of the wfn
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.MIN_OR_MAX'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_OPERATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Type of opertator which defines the spread functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.OPERATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_OUT_ITER_EACH = Quantity(
        type=str,
        shape=[],
        description='''
        Every how many iterations of the localization algorithm(Jacobi) the tolerance
        value is printed out
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.OUT_ITER_EACH'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the localization from a set of orbitals read from a localization restart
        file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.RESTART'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the MOS localization procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_STATES = Quantity(
        type=str,
        shape=[],
        description='''
        Which states to localize, LUMO up to now only available in GPW
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.STATES'))

    x_cp2k_input_FORCE_EVAL_DFT_LOCALIZE_USE_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Generate an improved initial guess based on a history of results, which is useful
        during MD.Will only work if the number of states to be localized remains constant.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOCALIZE.USE_HISTORY'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LOW_SPIN_ROKS(MSection):
    '''
    Specify the details of the low spin ROKS method.In particular, one can specify various
    terms added to the energy of the high spin roks configuration with a energy scaling
    factor, and a prescription of the spin state.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LOW_SPIN_ROKS'))

    x_cp2k_input_FORCE_EVAL_DFT_LOW_SPIN_ROKS_ENERGY_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        The scaling factors for each term added to the total energy.This list should
        contain one number for each term added to the total energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOW_SPIN_ROKS.ENERGY_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_LOW_SPIN_ROKS_SPIN_CONFIGURATION = Quantity(
        type=str,
        shape=[],
        description='''
        for each singly occupied orbital, specify if this should be an alpha (=1) or a
        beta (=2) orbitalThis keyword should be repeated, each repetition corresponding to
        an additional term.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LOW_SPIN_ROKS.SPIN_CONFIGURATION'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS(MSection):
    '''
    Controls the printing of the Density of States (DOS).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_N_GRIDPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of points in the computed DOS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.N_GRIDPOINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE(MSection):
    '''
    Controls the printing of cube files with the electronic density (states) contributing
    to the density of states within the specific energy range (MIN_ENERGY ≤ E ≤
    MAX_ENERGY). MIN_ENERGY and MAX_ENERGY need to be specified explicitly.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_MAX_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Upper bounds of the energy ranges of interest.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.MAX_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_MIN_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Lower bounds of the energy ranges of interest.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.MIN_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE_STRIDE = Quantity(
        type=str,
        shape=[],
        description='''
        The stride (X,Y,Z) used to write the cube file (larger values result in smaller
        cube files). You can provide 3 numbers (for X,Y,Z) or 1 number valid for all
        components.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE.STRIDE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV(MSection):
    '''
    Specifies the parameters needed for the chebyshev expansion based properties.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_N_CHEBYSHEV = Quantity(
        type=str,
        shape=[],
        description='''
        Order of the polynomial expansion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.N_CHEBYSHEV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_DOS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.DOS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV_PRINT_SPECIFIC_E_DENSITY_CUBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV.PRINT_SPECIFIC_E_DENSITY_CUBE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS(MSection):
    '''
    Specifies the parameters of the linear scaling SCF routines
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_FILTER_FACTOR_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Allows for dynamic EPS_FILTER. Updates the filter factor every scf-newton step by
        FILTER_FACTOR=FILTER_FACTOR*FILTER_FACTOR_SCALE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.FILTER_FACTOR_SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_FILTER_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to set a seperate EPS_FILTER in the newton iterations. The new EPS is
        EPS_FILTER*FILTER_FACTOR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.FILTER_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_LINE_SEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        Line serch type used in the curvy_setp optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.LINE_SEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_MIN_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Lowest EPS_FILTER in dynamic filtering. Given as multiple of EPS_FILTER:
        EPS_FILTER_MIN=EPS_FILTER*MIN_FILTER
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.MIN_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_MIN_HESSIAN_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal eigenvalue shift for the Hessian in the Newton iteration. Useful for small
        band gap systems (0.5-1.0 recommended).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.MIN_HESSIAN_SHIFT'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS_N_BCH_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Number of stored matrices in the Baker-Campbell-Hausdorff series. Reduces the BCH
        evaluation during line search but can be memory intense.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS.N_BCH_HISTORY'))


class x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF(MSection):
    '''
    Specifies the parameters of the linear scaling SCF routines
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_DYNAMIC_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        Should the threshold for the purification be chosen dynamically
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.DYNAMIC_THRESHOLD'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_EPS_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold on the convergence to start using DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.EPS_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold used for filtering matrix operations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.EPS_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_EPS_LANCZOS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold used for lanczos estimates.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.EPS_LANCZOS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the scf convergence. Change of the total energy per electron
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_EXTRAPOLATION_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of previous matrices used for the ASPC extrapolation of the initial guess.
        0 implies that an atomic guess is used at each step. low (1-2) will result in a
        drift of the constant of motion during MD. high (>5) might be somewhat unstable,
        leading to more SCF iterations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.EXTRAPOLATION_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_FIXED_MU = Quantity(
        type=str,
        shape=[],
        description='''
        Should the calculation be performed at fixed chemical potential, or should it be
        found fixing the number of electrons
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.FIXED_MU'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_INI_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration cycle to start DIIS Kohn-Sham matrix update
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.INI_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_LS_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Perform DIIS within linear scaling SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.LS_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MATRIX_CLUSTER_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify how atomic blocks should be clustered in the used matrices, in order to
        improve flop rate, and possibly speedup the matrix multiply. Note that the atomic
        s_preconditioner can not be used.Furthermore, since screening is on matrix blocks,
        slightly more accurate results can be expected with molecular.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MATRIX_CLUSTER_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MAX_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Size of LS_DIIS buffer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MAX_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MAX_ITER_LANCZOS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of lanczos iterations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MAX_ITER_LANCZOS'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCF iteration to be performed for one optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MIXING_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing density matrices uses the specified fraction in the SCF procedure.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MIXING_FRACTION'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_MU = Quantity(
        type=str,
        shape=[],
        description='''
        Value (or initial guess) for the chemical potential, i.e. some suitable energy
        between HOMO and LUMO energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.MU'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_NMIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal number of density mixing before start DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.NMIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_NON_MONOTONIC = Quantity(
        type=str,
        shape=[],
        description='''
        Should the purification be performed non-monotonically. Relevant for TC2 only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.NON_MONOTONIC'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_PERFORM_MU_SCAN = Quantity(
        type=str,
        shape=[],
        description='''
        Do a scan of the chemical potential after the SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.PERFORM_MU_SCAN'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_PURIFICATION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Scheme used to purify the Kohn-Sham matrix into the density matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.PURIFICATION_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_REPORT_ALL_SPARSITIES = Quantity(
        type=str,
        shape=[],
        description='''
        Run the sparsity report at the end of the SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.REPORT_ALL_SPARSITIES'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_RESTART_READ = Quantity(
        type=str,
        shape=[],
        description='''
        Read the density matrix before the (first) SCF.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.RESTART_READ'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_RESTART_WRITE = Quantity(
        type=str,
        shape=[],
        description='''
        Write the density matrix at the end of the SCF (currently requires
        EXTRAPOLATION_ORDER>0). Files might be rather large.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.RESTART_WRITE'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_S_INVERSION = Quantity(
        type=str,
        shape=[],
        description='''
        Method used to compute the inverse of S.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.S_INVERSION'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_S_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Preconditions S with some appropriate form.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.S_PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_SIGN_SQRT_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Order of the sqrt iteration, should be 2..5, 3 or 5 recommended
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.SIGN_SQRT_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_LS_SCF_SINGLE_PRECISION_MATRICES = Quantity(
        type=str,
        shape=[],
        description='''
        Matrices used within the LS code can be either double or single precision.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.LS_SCF.SINGLE_PRECISION_MATRICES'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CHEBYSHEV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CHEBYSHEV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF_CURVY_STEPS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF.CURVY_STEPS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_RS_GRID(MSection):
    '''
    Set options that influence how the realspace grids are being distributed in parallel
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.RS_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_DISTRIBUTION_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of slices in the x, y and z directions.-1 specifies that any
        number of slices is OK.If a given distribution can not be satisfied, a replicated
        grid will result.Also see LOCK_DISTRIBUTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.DISTRIBUTION_LAYOUT'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_DISTRIBUTION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Parallelization strategy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.DISTRIBUTION_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_HALO_REDUCTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to reduce the halo of the distributed grid (experimental features).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.HALO_REDUCTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_LOCK_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, only basic QS deals correctly with a non-default value.If the
        distribution is locked, a grid will have the same distribution asthe next finer
        multigrid (provided it is distributed).If unlocked, all grids can be distributed
        freely.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.LOCK_DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_MAX_DISTRIBUTED_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        If the multigrid-level of a grid is larger than the parameter, it will not be
        distributed in the automatic scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.MAX_DISTRIBUTED_LEVEL'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_RS_GRID_MEMORY_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A grid will only be distributed if the memory usage for that grid (including halo)
        is smaller than a replicated grid by this parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.RS_GRID.MEMORY_FACTOR'))


class x_cp2k_section_input_FORCE_EVAL_DFT_MGRID(MSection):
    '''
    multigrid information
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_COMMENSURATE = Quantity(
        type=str,
        shape=[],
        description='''
        If the grids should be commensurate. If true overrides the progression factor and
        the cutoffs of the sub grids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.COMMENSURATE'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the finest grid level. Default value for SE or DFTB calculation is
        1.0 [Ry].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_MULTIGRID_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        List of cutoff values to set up multigrids manually
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.MULTIGRID_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_MULTIGRID_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Activate a manual setting of the multigrids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.MULTIGRID_SET'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of multigrids to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_PROGRESSION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to find the cutoff of the multigrids that where not given explicitly
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.PROGRESSION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_REALSPACE = Quantity(
        type=str,
        shape=[],
        description='''
        If both rho and rho_gspace are needed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.REALSPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the grid at which a Gaussian is mapped, giving the cutoff used for a
        gaussian with alpha=1. A value 50+-10Ry might be required for highly accurate
        results,  Or for simulations with a variable cell. Versions prior to 2.3 used a
        default of 30Ry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.REL_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_MGRID_SKIP_LOAD_BALANCE_DISTRIBUTED = Quantity(
        type=str,
        shape=[],
        description='''
        Skip load balancing on distributed multigrids, which might be memory intensive.If
        not explicitly specified, runs using more than 1024 MPI tasks will default to
        .TRUE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MGRID.SKIP_LOAD_BALANCE_DISTRIBUTED'))

    x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_RS_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_MGRID_RS_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID.RS_GRID'))


class x_cp2k_section_input_FORCE_EVAL_DFT_PERIODIC_EFIELD(MSection):
    '''
    parameters for finite periodic electric field computed using the Berry phase approach.
    IMPORTANT: Can only be used in combination  with OT. Can not be used in combination
    with RTP or EMD.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.PERIODIC_EFIELD'))

    x_cp2k_input_FORCE_EVAL_DFT_PERIODIC_EFIELD_INTENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Intensity of the electric field in a.u
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.PERIODIC_EFIELD.INTENSITY'))

    x_cp2k_input_FORCE_EVAL_DFT_PERIODIC_EFIELD_POLARISATION = Quantity(
        type=str,
        shape=[],
        description='''
        Polarisation vector of electric field
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.PERIODIC_EFIELD.POLARISATION'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES(MSection):
    '''
    Enables the use of multipoles in the treatment of the electrostatics.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES_EPS_POL = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the rmsd threshold for the derivatives of the energy towards the Cartesian
        dipoles components
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES.EPS_POL'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES_MAX_IPOL_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of iterations for induced dipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES.MAX_IPOL_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES_MAX_MULTIPOLE_EXPANSION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum level of multipoles expansion used  for the electrostatics.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES.MAX_MULTIPOLE_EXPANSION'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES_POL_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the method to obtain self consistent induced multipole moments.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES.POL_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the Multipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID(MSection):
    '''
    Set options that influence how the realspace grids are being distributed in parallel
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_DISTRIBUTION_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of slices in the x, y and z directions.-1 specifies that any
        number of slices is OK.If a given distribution can not be satisfied, a replicated
        grid will result.Also see LOCK_DISTRIBUTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.DISTRIBUTION_LAYOUT'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_DISTRIBUTION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Parallelization strategy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.DISTRIBUTION_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_HALO_REDUCTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to reduce the halo of the distributed grid (experimental features).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.HALO_REDUCTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_LOCK_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, only basic QS deals correctly with a non-default value.If the
        distribution is locked, a grid will have the same distribution asthe next finer
        multigrid (provided it is distributed).If unlocked, all grids can be distributed
        freely.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.LOCK_DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_MAX_DISTRIBUTED_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        If the multigrid-level of a grid is larger than the parameter, it will not be
        distributed in the automatic scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.MAX_DISTRIBUTED_LEVEL'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID_MEMORY_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A grid will only be distributed if the memory usage for that grid (including halo)
        is smaller than a replicated grid by this parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID.MEMORY_FACTOR'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD(MSection):
    '''
    Ewald parameters controlling electrostatic only for CLASSICAL MM.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        alpha parameter associated with Ewald (EWALD|PME|SPME). Recommended for small
        systems is is alpha = 3.5 / r_cut. Tuning alpha, r_cut and gmax is needed to
        obtain O(N**1.5) scaling for ewald.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        tolerance of gaussians for fft interpolation (PME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.EPSILON'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_EWALD_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Expected accuracy in the Ewald sum. This number affects only the calculation of
        the cutoff for the real-space term of the ewald summation (EWALD|PME|SPME) as well
        as the construction of the neighbor lists (if the cutoff for non-bonded terms is
        smaller than the value employed to compute the EWALD real-space term). This
        keyword has no effect on the reciprocal space term (which can be tuned
        independently).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.EWALD_ACCURACY'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_EWALD_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        The type of ewald you want to perform.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.EWALD_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_GMAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points (SPME and EWALD). If a single number is specified,the same
        number of points is used for all three directions on the grid.If three numbers are
        given, each direction can have a different number of points.The number of points
        needs to be FFTable (which depends on the library used) and odd for EWALD.The
        optimal number depends e.g. on alpha and the size of the cell. 1 point per
        Angstrom is common.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.GMAX'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_NS_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points on small mesh (PME only), should be odd.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.NS_MAX'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_O_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        order of the beta-Euler spline (SPME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.O_SPLINE'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_EWALD_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Explicitly provide the real-space cutoff of the ewald summation (EWALD|PME|SPME).
        If present, overwrites the estimate of EWALD_ACCURACY and may affect the
        construction of the neighbor lists for non-bonded terms (in FIST), if the value
        specified is larger than the cutoff for non-bonded interactions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.EWALD.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_MULTIPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD_RS_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD.RS_GRID'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MT(MSection):
    '''
    Sets up parameters of  Martyna-Tuckerman poisson solver. Note that exact results are
    only guaranteed if the unit cell is twice as large as charge density (and serious
    artefacts can result if the cell is much smaller).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MT'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MT_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence parameter ALPHA*RMIN. Default value 7.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MT.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MT_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the multiplicative factor for the CUTOFF keyword in MULTI_GRID  section.
        The result gives the cutoff at which the 1/r non-periodic FFT3D is
        evaluated.Default is 2.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MT.REL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE(MSection):
    '''
    Controls the checking of the G-space term Spline Interpolation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR(MSection):
    '''
    controls the interpolation for the G-space term
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.PRECOND'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information during the run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE(MSection):
    '''
    This section is used to set up the decoupling of QM periodic images with the use of
    density derived atomic point charges.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_ANALYTICAL_GTERM = Quantity(
        type=str,
        shape=[],
        description='''
        Evaluates the Gterm in the Ewald Scheme analytically instead of using Splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.ANALYTICAL_GTERM'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_EWALD_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Precision achieved in the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.EWALD_PRECISION'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of grid points used for the Interpolation of the G-space term
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Real space cutoff for the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_CHECK_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_WAVELET(MSection):
    '''
    Sets up parameters of  wavelet based poisson solver.This solver allows for non-
    periodic (PERIODIC NONE) boundary conditions and slab-boundary conditions (but only
    PERIODIC XZ).It does not require very large unit cells, only that the density goes to
    zero on the faces of the cell.The use of PREFERRED_FFT_LIBRARY FFTSG is required
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.WAVELET'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_WAVELET_SCF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of scaling function used in the wavelet approach, the total energy depends on
        this choice,and the convergence with respect to cutoff depends on the selected
        scaling functions.Possible values are 8,14,16,20,24,30,40,50,60,100
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.WAVELET.SCF_TYPE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_POISSON(MSection):
    '''
    Sets up the poisson resolutor.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions on wich apply PBC. Important notice,  this only applies to
        the electrostatics. See the CELL section to specify the periodicity used for e.g.
        the pair lists. Typically the settings should be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_POISSON_POISSON_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of solver to use to solve the Poisson equation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POISSON.POISSON_SOLVER'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_EWALD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.EWALD'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_MULTIPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.MULTIPOLE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_WAVELET = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON_WAVELET'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON.WAVELET'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT(MSection):
    '''
    Use Becke weight population in a restraint/constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.COEFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT(MSection):
    '''
    Use DDAPC charges in a restraint (check code for details)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.COEFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER(MSection):
    '''
    Information on where to find DFTB parameters
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_COORDINATION_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Define cutoff for coordination number calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.COORDINATION_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling parameters (s6,sr6,s8) for the D3 dispersion method,
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.D3_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_DISPERSION_PARAMETER_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify file that contains the atomic dispersion parameters for the D3 method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.DISPERSION_PARAMETER_FILE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_DISPERSION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Define radius of dispersion interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.DISPERSION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_DISPERSION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Use dispersion correction of the specified type. Dispersion correction has to be
        switched on in the DFTB section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.DISPERSION_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_HB_SR_PARAM = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a modified version for the GAMMA within the SCC-DFTB scheme, specifically
        tuned for hydrogen bonds. Specify the exponent used in the exponential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.HB_SR_PARAM'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_PARAM_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specify file that contains the names of Slater-Koster tables: A plain text file,
        each line has the format "ATOM1 ATOM2 filename.spl".
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.PARAM_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_PARAM_FILE_PATH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directory with the DFTB parameter files. Used in combination with the
        filenames specified in the file given in PARAM_FILE_NAME.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.PARAM_FILE_PATH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_SK_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Define parameter file for atom pair
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.SK_FILE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER_UFF_FORCE_FIELD = Quantity(
        type=str,
        shape=[],
        description='''
        Name of file with UFF parameters that will be used for the dispersion correction.
        Needs to be specified when DISPERSION==.TRUE., otherwise cp2k crashes with a
        Segmentation Fault.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER.UFF_FORCE_FIELD'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB(MSection):
    '''
    Parameters needed to set up the DFTB methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DFTB'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_DIAGONAL_DFTB3 = Quantity(
        type=str,
        shape=[],
        description='''
        Use a diagonal version of the 3rd order energy correction (DFTB3)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.DIAGONAL_DFTB3'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_DISPERSION = Quantity(
        type=str,
        shape=[],
        description='''
        Use dispersion correction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.DISPERSION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_DO_EWALD = Quantity(
        type=str,
        shape=[],
        description='''
        Use Ewald type method instead of direct sum for Coulomb interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.DO_EWALD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_EPS_DISP = Quantity(
        type=str,
        shape=[],
        description='''
        Define accuracy of dispersion interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.EPS_DISP'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_HB_SR_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a modified version for the GAMMA within the SCC-DFTB scheme, specifically
        tuned for hydrogen bonds.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.HB_SR_GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_ORTHOGONAL_BASIS = Quantity(
        type=str,
        shape=[],
        description='''
        Assume orthogonal basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.ORTHOGONAL_BASIS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DFTB_SELF_CONSISTENT = Quantity(
        type=str,
        shape=[],
        description='''
        Use self-consistent method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DFTB.SELF_CONSISTENT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB_PARAMETER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DFTB.PARAMETER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_DISTRIBUTION(MSection):
    '''
    can be used used to tune the parallel distribution of the data
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_2D_MOLECULAR_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Distribute the atoms so that atoms belonging to a given molecule are on the same
        CPU for the 2D distribution. This might give rise to a worse distribution but
        reduces memory needs of finding the optimal distribution.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.2D_MOLECULAR_DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_BASIC_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Creates a distribution based on a few heuristics using only minimal memory and CPU
        time.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.BASIC_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_BASIC_SPATIAL_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Creates a distribution with spatial info, using only minimal memory and CPU time.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.BASIC_SPATIAL_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_COST_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        The cost model that needs to be minimized
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.COST_MODEL'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_SKIP_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Do not optimize the distribution, go for something very simple. Might be useful if
        the optimization, which scales quadratically in system size, is too expensive.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.SKIP_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DISTRIBUTION_SYMMETRIC = Quantity(
        type=str,
        shape=[],
        description='''
        Take the symmetry of the distribution_2d into account.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DISTRIBUTION.SYMMETRIC'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_HARRIS(MSection):
    '''
    This section specifies the flags for the calculation of the harris functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.HARRIS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_HARRIS_ACTIVATE = Quantity(
        type=str,
        shape=[],
        description='''
        Activates the harris functional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.HARRIS.ACTIVATE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_HARRIS_HARRIS_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Overrides the QS Energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.HARRIS.HARRIS_ENERGY'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT(MSection):
    '''
    Use mulliken charges in a restraint (check code for details)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.MULLIKEN_RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.MULLIKEN_RESTRAINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.MULLIKEN_RESTRAINT.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.MULLIKEN_RESTRAINT.TARGET'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONSTRAIN_EXPONENTS(MSection):
    '''
    specifies constraints for the exponents of the lri auxiliary basis sets in the
    optimization.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.CONSTRAIN_EXPONENTS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONSTRAIN_EXPONENTS_FERMI_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Exponent in the fermi-like constraint function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.CONSTRAIN_EXPONENTS.FERMI_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONSTRAIN_EXPONENTS_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper and lower boundaries as (1+scale)*exp and (1-scale)*exp. Fermi-
        like constraint function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.CONSTRAIN_EXPONENTS.SCALE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS(MSection):
    '''
    This section specifies the parameters for optimizing the lri auxiliary basis sets for
    LRIGPW. The Powell optimizer is used.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy for the objective function (RHOEND)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.ACCURACY'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONDITION_WEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword allows to give different weight factors to the condition number
        (LOG(cond) is used).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.CONDITION_WEIGHT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_DEGREES_OF_FREEDOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the degrees of freedom in the basis optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.DEGREES_OF_FREEDOM'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_GEOMETRIC_SEQUENCE = Quantity(
        type=str,
        shape=[],
        description='''
        Exponents are assumed to be a geometric squence. Only the minimal and maximal
        exponents of one set are optimized and the other exponents are obtained by
        geometric progression.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.GEOMETRIC_SEQUENCE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_MAX_FUN = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of function evaluations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.MAX_FUN'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size for search algorithm (RHOBEG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.STEP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_USE_CONDITION_NUMBER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether condition number should be part of optimization or not
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.USE_CONDITION_NUMBER'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONSTRAIN_EXPONENTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS_CONSTRAIN_EXPONENTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS.CONSTRAIN_EXPONENTS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT(MSection):
    '''
    Use S2 in a re/constraint (OT only)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.S2_RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.S2_RESTRAINT.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.S2_RESTRAINT.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.S2_RESTRAINT.TARGET'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SCPTB(MSection):
    '''
    Parameters needed to set up the SCPTB methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SCPTB'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_COORDINATION_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Define cutoff for coordination number calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.COORDINATION_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling parameters (s6,sr6,s8) for the D3 dispersion method,
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.D3_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DISPERSION_PARAMETER_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify file that contains the atomic dispersion parameters
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DISPERSION_PARAMETER_FILE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DISPERSION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Define radius of dispersion interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DISPERSION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DISPERSION = Quantity(
        type=str,
        shape=[],
        description='''
        Use dispersion correction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DISPERSION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DO_EWALD = Quantity(
        type=str,
        shape=[],
        description='''
        Use Ewald type method instead of direct sum for Coulomb interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DO_EWALD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DO_SCC = Quantity(
        type=str,
        shape=[],
        description='''
        Use self consistent charge method. Can be used together with DO_SCP to get TB
        method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DO_SCC'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_DO_SCP = Quantity(
        type=str,
        shape=[],
        description='''
        Use SCP method. Can be used to switch off SCP to get a SCC-DFTB method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.DO_SCP'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_PAIR_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Define cutoff for pair potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.PAIR_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_PARAMETER_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specify file that contains the atomic parameters
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.PARAMETER_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCPTB_STO_NG = Quantity(
        type=str,
        shape=[],
        description='''
        Provides the order of the Slater orbital expansion of Gaussian-Type Orbitals.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCPTB.STO_NG'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_COULOMB(MSection):
    '''
    Setup parameters for the evaluation of the COULOMB term in SE calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.COULOMB'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_COULOMB_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for the evaluation of the  Coulomb integrals. For non-
        periodic calculation the default value is exactly the full cell dimension, in
        order to evaluate all pair interactions. Instead, for periodic calculations the
        default numerical value is used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.COULOMB.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_COULOMB_RC_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Range of cutoff switch function (tapering): 0.5*(1-TANH((r-r0)/RC_RANGE)), where
        r0=2.0*RC_TAPER-20.0*RC_RANGE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.COULOMB.RC_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_COULOMB_RC_TAPER = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for Tapering Coulomb integrals. If not specified it
        assumes the same value specified for the CUTOFF.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.COULOMB.RC_TAPER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE(MSection):
    '''
    Setup parameters for the evaluation of the EXCHANGE and  core Hamiltonian terms in SE
    calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.EXCHANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for the evaluation of the Exchange integrals. For non-
        periodic calculation the default value is exactly the full cell dimension, in
        order to evaluate all pair interactions. Instead, for periodic calculations the
        default is the minimum value between 1/4 of the cell dimension and the value
        specified in input (either explicitly defined or the default numerical value).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.EXCHANGE.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE_RC_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Range of cutoff switch function (tapering): 0.5*(1-TANH((r-r0)/RC_RANGE)), where
        r0=2.0*RC_TAPER-20.0*RC_RANGE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.EXCHANGE.RC_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE_RC_TAPER = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for Tapering Exchange integrals. If not specified it
        assumes the same value specified for the CUTOFF.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.EXCHANGE.RC_TAPER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_GA(MSection):
    '''
    Sets up memory parameters for the storage of the integrals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.GA'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_GA_NCELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the number of linked cells for the neighbor list. Default value is number
        of processors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.GA.NCELLS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION(MSection):
    '''
    Setup parameters for the evaluation of the long-range correction term in SE
    calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.LR_CORRECTION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for the evaluation of the long-ranbe correction
        integrals.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.LR_CORRECTION.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION_RC_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Range of cutoff switch function (tapering): 0.5*(1-TANH((r-r0)/RC_RANGE)), where
        r0=2.0*RC_TAPER-20.0*RC_RANGE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.LR_CORRECTION.RC_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION_RC_TAPER = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for Tapering the long-range correction integrals. If
        not specified it assumes the same value specified for the CUTOFF.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.LR_CORRECTION.RC_TAPER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the integrals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_MEMORY_COMPRESS = Quantity(
        type=str,
        shape=[],
        description='''
        Enables the compression of the integrals in memory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.MEMORY.COMPRESS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_MEMORY_EPS_STORAGE = Quantity(
        type=str,
        shape=[],
        description='''
        Storage threshold for compression is EPS_STORAGE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.MEMORY.EPS_STORAGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] used to store precomputed (possibly
        compressed) two-electron two-center integrals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.MEMORY.MAX_MEMORY'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS(MSection):
    '''
    This section specifies the input parameters for the construction of neighbor lists.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.NEIGHBOR_LISTS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS_GEO_CHECK = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the check that two atoms are never below the minimum value
        used to construct the splines during the construction of the neighbouring list.
        Disabling this keyword avoids CP2K to abort in case two atoms are below the
        minimum  value of the radius used to generate the splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.NEIGHBOR_LISTS.GEO_CHECK'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS_NEIGHBOR_LISTS_FROM_SCRATCH = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the building of the neighbouring list from scratch.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.NEIGHBOR_LISTS.NEIGHBOR_LISTS_FROM_SCRATCH'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS_VERLET_SKIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the Verlet Skin for the generation of the neighbor lists
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.NEIGHBOR_LISTS.VERLET_SKIN'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_SCREENING(MSection):
    '''
    Setup parameters for the tapering of the Coulomb/Exchange Screening in KDSO-D integral
    scheme,
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_SCREENING_RC_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Range of cutoff switch function (tapering): 0.5*(1-TANH((r-r0)/RC_RANGE)), where
        r0=2*RC_TAPER-20*RC_RANGE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.SCREENING.RC_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_SCREENING_RC_TAPER = Quantity(
        type=str,
        shape=[],
        description='''
        Atomic Cutoff Radius Cutoff for Tapering the screening term.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.SCREENING.RC_TAPER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE(MSection):
    '''
    Parameters needed to set up the Semi-empirical methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_ANALYTICAL_GRADIENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Nuclear Gradients are computed analytically or numerically
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.ANALYTICAL_GRADIENTS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_COORDINATION_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Define cutoff for coordination number calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.COORDINATION_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling parameters (s6,sr6,s8) for the D3 dispersion method,
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.D3_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_DELTA = Quantity(
        type=str,
        shape=[],
        description='''
        Step size in finite difference force calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.DELTA'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_DISPERSION_PARAMETER_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify file that contains the atomic dispersion parameters
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.DISPERSION_PARAMETER_FILE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_DISPERSION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Define radius of dispersion interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.DISPERSION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_DISPERSION = Quantity(
        type=str,
        shape=[],
        description='''
        Use dispersion correction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.DISPERSION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_FORCE_KDSO_D_EXCHANGE = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords forces the usage of the KDSO-D integral screening for the Exchange
        integrals (default is to apply the screening only to the Coulomb integrals.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.FORCE_KDSO-D_EXCHANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_INTEGRAL_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form for the
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.INTEGRAL_SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_ORTHOGONAL_BASIS = Quantity(
        type=str,
        shape=[],
        description='''
        Assume orthogonal basis set. This flag is overwritten by methods with fixed
        orthogonal/non-orthogonal basis set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.ORTHOGONAL_BASIS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of treatment for the electrostatic long-range part in semi-
        empirical calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_SCP = Quantity(
        type=str,
        shape=[],
        description='''
        Perform a SCP-NDDO calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.SCP'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SE_STO_NG = Quantity(
        type=str,
        shape=[],
        description='''
        Provides the order of the Slater orbital expansion of Gaussian-Type Orbitals.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SE.STO_NG'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_COULOMB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_COULOMB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.COULOMB'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_EXCHANGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.EXCHANGE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_GA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_GA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.GA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_LR_CORRECTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.LR_CORRECTION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.MEMORY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_NEIGHBOR_LISTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.NEIGHBOR_LISTS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE.SCREENING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_QS(MSection):
    '''
    parameters needed to set up the Quickstep framework
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_ALMO_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Perform ALMO SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.ALMO_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_ALPHA0_HARD = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW: Exponent for hard compensation charge
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.ALPHA0_HARD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_BCSR_CODE = Quantity(
        type=str,
        shape=[],
        description='''
        Selects BCSR pathway.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.BCSR_CODE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_CHECK_BCSR_CODE = Quantity(
        type=str,
        shape=[],
        description='''
        Check the BCSR code on actual data, once per QS run.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.CHECK_BCSR_CODE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_CORE_PPL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the method used to calculate the local pseudopotential contribution.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.CORE_PPL'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_DEBUG_LRI_INTEGRALS = Quantity(
        type=str,
        shape=[],
        description='''
        Debug the integrals needed for LRIGPW.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.DEBUG_LRI_INTEGRALS'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_CORE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Precision for mapping the core charges.Overrides EPS_DEFAULT/100.0 value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_CORE_CHARGE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_CPC = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the GAPW projection. Overrides EPS_DEFAULT value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_CPC'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_DEFAULT = Quantity(
        type=str,
        shape=[],
        description='''
        Try setting all EPS_xxx to values leading to an energy correct up to EPS_DEFAULT
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_DEFAULT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_FILTER_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the threshold for filtering matrix elements.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_FILTER_MATRIX'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_GVG_RSPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the realspace KS matrix element integration. Overrides
        SQRT(EPS_DEFAULT) value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_GVG_RSPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_KG_ORB = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision used in coloring the subsets for the Kim-Gordon method. Overrides
        SQRT(EPS_DEFAULT) value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_KG_ORB'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_PGF_ORB = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the overlap matrix elements. Overrides SQRT(EPS_DEFAULT) value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_PGF_ORB'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_PPL = Quantity(
        type=str,
        shape=[],
        description='''
        Adjusts the precision for the local part of the pseudo potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_PPL'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_PPNL = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the non-local part of the pseudo potential. Overrides
        sqrt(EPS_DEFAULT) value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_PPNL'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_RHO_GSPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the density mapping in gspace.Overrides EPS_DEFAULT
        value..Overrides EPS_RHO value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_RHO_GSPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_RHO_RSPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the density mapping in rspace.Overrides EPS_DEFAULT
        value..Overrides EPS_RHO value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_RHO_RSPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPS_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets precision of the density mapping on the grids.Overrides EPS_DEFAULT value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPS_RHO'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPSFIT = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW: precision to give the extention of a hard gaussian
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPSFIT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPSISO = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW: precision to determine an isolated projector
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPSISO'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPSRHO0 = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW : precision to determine the range of V(rho0-rho0soft)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPSRHO0'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EPSSVD = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW: tolerance used in the singular value decomposition of the projector matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EPSSVD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EXTRAPOLATION_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Order for the PS or ASPC extrapolation (typically 2-4). Higher order might bring
        more accuracy, but comes, for large systems, also at some cost. In some cases, a
        high order extrapolation is not stable, and the order needs to be reduced.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EXTRAPOLATION_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_EXTRAPOLATION = Quantity(
        type=str,
        shape=[],
        description='''
        Extrapolation strategy for the wavefunction during e.g. MD.PS and ASPC are
        recommended, see also EXTRAPOLATION_ORDER.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.EXTRAPOLATION'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_FORCE_PAW = Quantity(
        type=str,
        shape=[],
        description='''
        Use the GAPW scheme also for atoms with soft basis sets, i.e.  the local densities
        are computed even if hard and soft should be equal. If this keyword is not set to
        true, those atoms with soft basis sets are treated by a GPW scheme, i.e. the
        corresponding density contribution goes on the global grid and is expanded in PW.
        This option nullifies the effect of the GPW_TYPE in the atomic KIND
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.FORCE_PAW'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_KG_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Use a Kim-Gordon-like scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.KG_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_LADDN0 = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW : integer added to the max L of the basis set, used to determine the maximum
        value of L for the compensation charge density.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.LADDN0'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_LMAXN0 = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW : max L number for the expansion compensation densities in spherical
        gaussians
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.LMAXN0'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_LMAXN1 = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW : max L number for expansion of the atomic densities in spherical gaussians
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.LMAXN1'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_LS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Perform a linear scaling SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.LS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_MAP_CONSISTENT = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the exact derivative (Hks) of the energy with respect to the density
        matrix. This is slightly more expensive than using an approximate computation, but
        consistent mapping can improve the stability of the SCF procedure, especially for
        a tight EPS_SCF and a less tight EPS_DEFAULT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.MAP_CONSISTENT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_MAX_RAD_LOCAL = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW : maximum radius of gaussian functions included in the generation of
        projectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.MAX_RAD_LOCAL'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the electronic structure method that should be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_PW_GRID_BLOCKED = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to set the distribution in g-space for the pw grids and their FFT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.PW_GRID_BLOCKED'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_PW_GRID_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Force a particular real-space layout for the plane waves grids. Numbers ≤ 0 mean
        that this dimension is free, incorrect layouts will be ignored. The default
        (/-1,-1/) causes CP2K to select a good value, i.e. plane distributed for large
        grids, more general distribution for small grids.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.PW_GRID_LAYOUT'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_PW_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        What kind of PW_GRID should be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.PW_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        GAPW: algorithm to construct the atomic radial grids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.QUADRATURE'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_SCP = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional self-consistent polarization through additional response
        basis functions (read in through AUX_BASIS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.SCP'))

    x_cp2k_input_FORCE_EVAL_DFT_QS_TRANSPORT = Quantity(
        type=str,
        shape=[],
        description='''
        Perform transport calculations (coupling CP2K and OMEN)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.QS.TRANSPORT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_BECKE_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.BECKE_RESTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_DDAPC_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DDAPC_RESTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_DFTB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DFTB'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_DISTRIBUTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_DISTRIBUTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.DISTRIBUTION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_HARRIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_HARRIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.HARRIS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_MULLIKEN_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.MULLIKEN_RESTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_OPTIMIZE_LRI_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.OPTIMIZE_LRI_BASIS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_S2_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.S2_RESTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SCPTB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SCPTB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SCPTB'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS_SE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS.SE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION(MSection):
    '''
    Parameters needed to set up the real time propagation for the electron dynamics
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_ACCURACY_REFINEMENT = Quantity(
        type=str,
        shape=[],
        description='''
        If using density propagation some parts should be calculated with a higher
        accuracy than the rest to reduce numerical noise. This factor determines by how
        much the filtering threshold is reduced for these calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.ACCURACY_REFINEMENT'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_APPLY_DELTA_PULSE = Quantity(
        type=str,
        shape=[],
        description='''
        Applies a delta kick to the initial wfn (only RTP for now - the EMD  case is not
        yet implemented).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.APPLY_DELTA_PULSE'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_ASPC_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Speciefies how many steps will be used for extrapolation. One will be always used
        which is means X(t+dt)=X(t)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.ASPC_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_CALCULATE_IDEMPOTENCY = Quantity(
        type=str,
        shape=[],
        description='''
        Calculates the idempotency. Costs some performance. Is for free if McWeeny is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.CALCULATE_IDEMPOTENCY'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_DELTA_PULSE_DIRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Direction of the applied electric field. The k vector is given as
        2*Pi*[i,j,k]*inv(h_mat), which for PERIODIC .FALSE. yields exp(ikr) periodic with
        the unit cell, only if DELTA_PULSE_SCALE is set to unity. For an orthorhombic cell
        [1,0,0] yields [2*Pi/L_x,0,0]. For small cells, this results in a very large kick.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.DELTA_PULSE_DIRECTION'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_DELTA_PULSE_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Scale the k vector, which for PERIODIC .FALSE. results in exp(ikr) no longer being
        periodic with the unit cell. The norm of k is the strength of the applied electric
        field in atomic units.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.DELTA_PULSE_SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_DENSITY_PROPAGATION = Quantity(
        type=str,
        shape=[],
        description='''
        The density matrix is propagated instead of the molecular orbitals. This allows
        for a linear scaling simulation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.DENSITY_PROPAGATION'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_EPS_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the self consistent propagator loop.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.EPS_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_EXP_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy for the taylor and pade approximation. This is only an upper bound bound
        since the norm used for the guess is an upper bound for the needed one.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.EXP_ACCURACY'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_HFX_BALANCE_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        If HFX is used, this keyword forces a redistribution/recalculation of the
        integrals, balanced with respect to the in core steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.HFX_BALANCE_IN_CORE'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_INITIAL_WFN = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the initial WFN used for propagation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.INITIAL_WFN'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_MAT_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Which method should be used to calculate the exponential in the propagator. For
        Ehrenfest MD only the Taylor method works, for real time propagation
        diagonalization works as well.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.MAT_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximal number of iterations for the self consistent propagator loop.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_MCWEENY_EPS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold after which McWeeny is terminated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.MCWEENY_EPS'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_MCWEENY_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the maximum amount of McWeeny steps used after each converged step in
        density propagation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.MCWEENY_MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_ORTHONORMAL = Quantity(
        type=str,
        shape=[],
        description='''
        Performs rtp in the orthonormal basis, currently only works with density
        propagation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.ORTHONORMAL'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Apply a delta-kick that is compatible with periodic boundary conditions for any
        value of DELTA_PULSE_SCALE. Uses perturbation theory for the preparation of the
        initial wfn. Note that the pulse is only applied when INITIAL_WFN is set to
        SCF_WFN, and not for restarts (RT_RESTART).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_PROPAGATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Which propagator should be used for the orbitals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.PROPAGATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_SC_CHECK_START = Quantity(
        type=str,
        shape=[],
        description='''
        Speciefies how many iteration steps will be done without a check for self
        consistency. Can save some time in big calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.SC_CHECK_START'))

    x_cp2k_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION_WRITE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        For density propagation. It writes out the density matrix after each step
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION.WRITE_RESTART'))


class x_cp2k_section_input_FORCE_EVAL_DFT_RELATIVISTIC(MSection):
    '''
    parameters needed and setup for relativistic calculations
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.RELATIVISTIC'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_DKH_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        The order of the DKH transformation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.DKH_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        type of relativistic correction used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        External potential used in DKH transformation, full 1/r or erfc(r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_TRANSFORMATION = Quantity(
        type=str,
        shape=[],
        description='''
        Type of DKH transformation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.TRANSFORMATION'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_Z_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The minimal atomic number considered for atom transformation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.Z_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_RELATIVISTIC_ZORA_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of ZORA method to be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELATIVISTIC.ZORA_TYPE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_ANDREUSSI(MSection):
    '''
    Define the parameters of the dielectric smoothing function proposed by Andreussi et
    al.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS.ANDREUSSI'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_ANDREUSSI_RHO_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum density value used for the smoothing of the dielectric function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.ANDREUSSI.RHO_MAX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_ANDREUSSI_RHO_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum density value used for the smoothing of the dielectric function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.ANDREUSSI.RHO_MIN'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_FATTEBERT_GYGI(MSection):
    '''
    Define the parameters of the dielectric smoothing function proposed by Fattebert and
    Gygi
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS.FATTEBERT-GYGI'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_FATTEBERT_GYGI_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter β changes the width of the interface solute-solvent
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.FATTEBERT-GYGI.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_FATTEBERT_GYGI_RHO_ZERO = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter ρ<sub>0</sub> defines the critical density in the middle of the
        interface solute-solvent
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.FATTEBERT-GYGI.RHO_ZERO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCCS(MSection):
    '''
    Define the parameters for self-consistent continuum solvation (SCCS) model
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Solvent specific tunable parameter for the calculation of the repulsion term
        <i>G<sup>rep</sup> = α S</i> where <i>S</i> is the (quantum) surface of the cavity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Solvent specific tunable parameter for the calculation of the dispersion term
        <i>G<sup>dis</sup> = β V</i> where <i>V</i> is the (quantum) volume of the cavity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_DELTA_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        Numerical increment for the calculation of the (quantum) surface of the solute
        cavity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.DELTA_RHO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_DERIVATIVE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method for the calculation of the numerical derivatives on the real-space grids
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.DERIVATIVE_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_DIELECTRIC_CONSTANT = Quantity(
        type=str,
        shape=[],
        description='''
        Dielectric constant of the solvent
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.DIELECTRIC_CONSTANT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_EPS_SCCS = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance for the convergence of the polarisation density, i.e. requested accuracy
        for the SCCS iteration cycle
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.EPS_SCCS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The SCCS iteration cycle is activated only if the SCF iteration cycle is converged
        to this threshold value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Surface tension of the solvent used for the calculation of the cavitation term
        <i>G<sup>cav</sup> = γ S</i> where <i>S</i> is the (quantum) surface of the cavity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCCS iteration steps performed to converge within the given
        tolerance
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method used for the smoothing of the dielectric function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_MIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing parameter (Hartree damping) employed during the iteration procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.MIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_SCCS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the SCCS section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCCS.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_ANDREUSSI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_ANDREUSSI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS.ANDREUSSI'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_FATTEBERT_GYGI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCCS_FATTEBERT_GYGI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS.FATTEBERT-GYGI'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON(MSection):
    '''
    Settings for DAVIDSON
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_CONV_MOS_PERCENT = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal percent of MOS that have to converge within the Davidson loop before the
        SCF iteration is completed and a new Hamiltonian is computed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.CONV_MOS_PERCENT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (0.001 doing normally fine). For the
        other preconditioners, making this value larger (0.2) will tame the preconditioner
        in case of poor initial guesses.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_FIRST_PREC = Quantity(
        type=str,
        shape=[],
        description='''
        First SCF iteration at which a Preconditioner is employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.FIRST_PREC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_NEW_PREC_EACH = Quantity(
        type=str,
        shape=[],
        description='''
        Number of SCF iterations after which a new Preconditioner is computed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.NEW_PREC_EACH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON_SPARSE_MOS = Quantity(
        type=str,
        shape=[],
        description='''
        Use MOS as sparse matrix and avoid as much as possible multiplications with full
        matrices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON.SPARSE_MOS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING(MSection):
    '''
    Define type and parameters for mixingprocedures to be applied to the density matrix.
    Normally, only one type of mixing method should be accepted. The mixing procedures
    activated by this section are only active for diagonalization methods, i.e. not with
    minimization methods based on OT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be included
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Denominator parameter in Kerker damping introduced to suppress charge sloshing:
        rho_mix(g) =rho_in(g) + alpha*g^2/(g^2 + beta^2)*(rho_out(g)-rho_in(g))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_W0 = Quantity(
        type=str,
        shape=[],
        description='''
        w0 parameter used in Broyden mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_W0'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_WMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WMAX
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_WMAX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_WREF = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WREF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_WREF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_MAX_GVEC_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Restricts the G-space mixing to lower part of G-vector spectrum, up to a G0, by
        assigning the exponent of the Gaussian that can be represented by vectors smaller
        than G0 within a certain accuracy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.MAX_GVEC_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_MAX_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Upper bound for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.MAX_STEP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_N_SIMPLE_MIX = Quantity(
        type=str,
        shape=[],
        description='''
        Number of kerker damping iterations before starting other mixing procedures
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.N_SIMPLE_MIX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NBUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of previous steps stored for the actual mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NBUFFER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NMIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal number of density mixing (should be greater than 0),before starting DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NMIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NSKIP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of initial iteration for which the mixing is skipped
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NSKIP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_PULAY_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be added to the Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.PULAY_ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_PULAY_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of residual contribution to be added to Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.PULAY_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_R_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Control factor for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.R_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_REGULARIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Regularization parameter to stabilize the inversion of the residual matrix {Yn^t
        Yn} in the multisecant mixing scheme (noise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.REGULARIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the mixing procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF(MSection):
    '''
    Activation of self-consistenf subspace refinement by diagonalization of H by adjusting
    the occupation but keeping the MOS unchanged.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_ADAPT_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Required density matrix accuracy as compared to current SCF convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_ADAPT_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_ENE = Quantity(
        type=str,
        shape=[],
        description='''
        Required energy accuracy for convergence of subspace diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_ENE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_SKIP_SUB_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Level of convergence to be reached before starting the internal loop of subspace
        rotations. Above this threshold only the outer diagonalization method is used.  If
        negative the subspace rotation is started at the first iteration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_SKIP_SUB_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations for the SCF inner loop
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of inner SCF loop to refine occupations in MOS subspace
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV(MSection):
    '''
    Settings for KRYLOV
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV_CHECK_MOS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        This requires to check the convergence of MOS also when standard diagonalization
        steps are performed, if the block krylov approach is active.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV.CHECK_MOS_CONV'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV_EPS_KRYLOV = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterion for the MOs
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV.EPS_KRYLOV'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV_EPS_STD_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Level of convergence to be reached before starting the Lanczos procedure. Above
        this threshold a standard diagonalization method is used.  If negative Lanczos is
        started at the first iteration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV.EPS_STD_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV_NBLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the block of vectors refined simultaneously by the Lanczos procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV.NBLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV_NKRYLOV = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension of the Krylov space used for the Lanczos refinement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV.NKRYLOV'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT(MSection):
    '''
    Sets the various options for the orbital transformation (OT) method. Default settings
    already provide an efficient, yet robust method. Most systems benefit from using the
    FULL_ALL preconditioner combined with a small value (0.001) of ENERGY_GAP.Well-behaved
    systems might benefit from using a DIIS minimizer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for OT
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_ADAPTIVE_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Enable adaptive curvature estimation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_ADAPTIVE_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Underrelaxation for the broyden mixer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_ENABLE_FLIP = Quantity(
        type=str,
        shape=[],
        description='''
        Ensure positive definite update
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_ENABLE_FLIP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_ETA = Quantity(
        type=str,
        shape=[],
        description='''
        Dampening of estimated energy curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_ETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_FORGET_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Forget history on bad approximation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_FORGET_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Backtracking parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Growth limit of curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA_DECREASE = Quantity(
        type=str,
        shape=[],
        description='''
        Reduction of curvature on bad approximation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA_DECREASE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum adaptive curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA_MIN'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Curvature of energy functional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ENERGIES = Quantity(
        type=str,
        shape=[],
        description='''
        Optimize orbital energies for use in Fermi-Dirac smearing (requires ROTATION and
        FD smearing to be active).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ENERGIES'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (can be a small number, e.g. 0.002).
        FULL_SINGLE_INVERSE takes it as lower bound (values below 0.05 can cause stability
        issues). In general, heigher values will tame the preconditioner in case of poor
        initial guesses. A negative value will leave the choice to CP2K depending on type
        of preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_EPS_IRAC_FILTER_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the threshold for filtering the matrices.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.EPS_IRAC_FILTER_MATRIX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_EPS_IRAC_QUICK_EXIT = Quantity(
        type=str,
        shape=[],
        description='''
        Only one extra refinement iteration is done when the norm is below this value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.EPS_IRAC_QUICK_EXIT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_EPS_IRAC_SWITCH = Quantity(
        type=str,
        shape=[],
        description='''
        The algorithm switches to the polynomial refinement when the norm is below this
        value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.EPS_IRAC_SWITCH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_EPS_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Targeted accuracy during the refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.EPS_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_EPS_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy of the taylor expansion for the matrix functions, should normally
        be kept as is.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.EPS_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_GOLD_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target relative uncertainty in the location of the minimum for LINESEARCH GOLD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.GOLD_TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_IRAC_DEGREE = Quantity(
        type=str,
        shape=[],
        description='''
        The refinement polynomial degree (2, 3 or 4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.IRAC_DEGREE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_LINESEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the OT minimizer, in increasing order of
        robustness and cost. MINIMIZER CG combined with LINESEARCH GOLD should always find
        an electronic minimum.  Whereas the 2PNT minimizer is almost always OK, 3PNT might
        be needed for systems in which successive OT CG steps do not decrease the total
        energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.LINESEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_MAX_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.MAX_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_MAX_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum order of the Taylor expansion before diagonalisation is prefered, for
        large parallel runs a slightly higher order could sometimes result in a small
        speedup.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.MAX_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_MINIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Minimizer to be used with the OT method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.MINIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_MIXED_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a mixed precision algorithm.With a well behaved basis set (i.e. condition
        number less than 1/eps_sp)it provides double precision accuracy results and up to
        a 2 fold speedup for building and applying the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.MIXED_PRECISION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_N_HISTORY_VEC = Quantity(
        type=str,
        shape=[],
        description='''
        Number of history vectors to be used with DIIS or BROYDEN
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.N_HISTORY_VEC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_NONDIAG_ENERGY_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        The prefactor for the non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.NONDIAG_ENERGY_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_NONDIAG_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Add a non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.NONDIAG_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_OCCUPATION_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Preconditioner with the occupation numbers (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.OCCUPATION_PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ON_THE_FLY_LOC = Quantity(
        type=str,
        shape=[],
        description='''
        On the fly localization of the molecular orbitals. Can only be used with OT/IRAC.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ON_THE_FLY_LOC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ORTHO_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        The orthogonality method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ORTHO_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes. They differ in
        effectiveness, cost of construction, cost of application. Properly preconditioned
        minimization can be orders of magnitude faster than doing nothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_ROTATION = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional variables so that rotations of the occupied subspace are
        allowed as well, only needed for cases where the energy is not invariant under  a
        rotation of the occupied subspace such as non-singlet restricted calculations  or
        fractional occupations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.ROTATION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_SAFE_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Reject DIIS steps if they point away from the minimum, do SD in that case.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.SAFE_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_SCP_NDDO = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional self-consistent polarization through response basis set =
        orbital basis set for NDDO.)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.SCP_NDDO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the ot method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial stepsize used for the line search, sometimes this parameter can be reduced
        to stablize DIIS or to improve the CG behavior in the first few steps. The optimal
        value depends on the quality of the preconditioner. A negative values leaves the
        choice to CP2K depending on the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT.STEPSIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION(MSection):
    '''
    Set up type and parameters for Kohn-Sham matrix diagonalization.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_EPS_ADAPT = Quantity(
        type=str,
        shape=[],
        description='''
        Required accuracy in iterative diagonalization as compared to current SCF
        convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.EPS_ADAPT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_EPS_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Required accuracy in iterative diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.EPS_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_EPS_JACOBI = Quantity(
        type=str,
        shape=[],
        description='''
        Below this threshold value for the SCF convergence the pseudo-diagonalization
        method using Jacobi rotations is activated. This method is much faster than a real
        diagonalization and it is even speeding up while achieving full
        convergence.However, it needs a pre-converged wavefunction obtained by at least
        one real diagonalization which is further optimized while keeping the original
        eigenvalue spectrum. The MO eigenvalues are NOT updated. The method might be
        useful to speed up calculations for large systems e.g. using a semi-empirical
        method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.EPS_JACOBI'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_JACOBI_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the accuracy of the pseudo-diagonalization method using Jacobi rotations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.JACOBI_THRESHOLD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in iterative diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the diagonalization method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DAVIDSON'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DAVIDSON'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_DIAG_SUB_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.DIAG_SUB_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_KRYLOV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.KRYLOV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION_OT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION.OT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_MIXING(MSection):
    '''
    Define type and parameters for mixingprocedures to be applied to the density matrix.
    Normally, only one type of mixing method should be accepted. The mixing procedures
    activated by this section are only active for diagonalization methods, i.e. not with
    minimization methods based on OT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.MIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be included
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Denominator parameter in Kerker damping introduced to suppress charge sloshing:
        rho_mix(g) =rho_in(g) + alpha*g^2/(g^2 + beta^2)*(rho_out(g)-rho_in(g))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_BROY_W0 = Quantity(
        type=str,
        shape=[],
        description='''
        w0 parameter used in Broyden mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.BROY_W0'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_BROY_WMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WMAX
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.BROY_WMAX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_BROY_WREF = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WREF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.BROY_WREF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_MAX_GVEC_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Restricts the G-space mixing to lower part of G-vector spectrum, up to a G0, by
        assigning the exponent of the Gaussian that can be represented by vectors smaller
        than G0 within a certain accuracy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.MAX_GVEC_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_MAX_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Upper bound for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.MAX_STEP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_N_SIMPLE_MIX = Quantity(
        type=str,
        shape=[],
        description='''
        Number of kerker damping iterations before starting other mixing procedures
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.N_SIMPLE_MIX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_NBUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of previous steps stored for the actual mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.NBUFFER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_NMIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal number of density mixing (should be greater than 0),before starting DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.NMIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_NSKIP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of initial iteration for which the mixing is skipped
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.NSKIP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_PULAY_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be added to the Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.PULAY_ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_PULAY_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of residual contribution to be added to Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.PULAY_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_R_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Control factor for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.R_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_REGULARIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Regularization parameter to stabilize the inversion of the residual matrix {Yn^t
        Yn} in the multisecant mixing scheme (noise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.REGULARIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MIXING_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the mixing procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MIXING.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OT(MSection):
    '''
    Sets the various options for the orbital transformation (OT) method. Default settings
    already provide an efficient, yet robust method. Most systems benefit from using the
    FULL_ALL preconditioner combined with a small value (0.001) of ENERGY_GAP.Well-behaved
    systems might benefit from using a DIIS minimizer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.OT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for OT
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_ADAPTIVE_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Enable adaptive curvature estimation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_ADAPTIVE_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Underrelaxation for the broyden mixer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_ENABLE_FLIP = Quantity(
        type=str,
        shape=[],
        description='''
        Ensure positive definite update
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_ENABLE_FLIP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_ETA = Quantity(
        type=str,
        shape=[],
        description='''
        Dampening of estimated energy curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_ETA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_FORGET_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Forget history on bad approximation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_FORGET_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Backtracking parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Growth limit of curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_SIGMA_DECREASE = Quantity(
        type=str,
        shape=[],
        description='''
        Reduction of curvature on bad approximation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_SIGMA_DECREASE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_SIGMA_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum adaptive curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_SIGMA_MIN'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_BROYDEN_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Curvature of energy functional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.BROYDEN_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ENERGIES = Quantity(
        type=str,
        shape=[],
        description='''
        Optimize orbital energies for use in Fermi-Dirac smearing (requires ROTATION and
        FD smearing to be active).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ENERGIES'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (can be a small number, e.g. 0.002).
        FULL_SINGLE_INVERSE takes it as lower bound (values below 0.05 can cause stability
        issues). In general, heigher values will tame the preconditioner in case of poor
        initial guesses. A negative value will leave the choice to CP2K depending on type
        of preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_EPS_IRAC_FILTER_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the threshold for filtering the matrices.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.EPS_IRAC_FILTER_MATRIX'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_EPS_IRAC_QUICK_EXIT = Quantity(
        type=str,
        shape=[],
        description='''
        Only one extra refinement iteration is done when the norm is below this value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.EPS_IRAC_QUICK_EXIT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_EPS_IRAC_SWITCH = Quantity(
        type=str,
        shape=[],
        description='''
        The algorithm switches to the polynomial refinement when the norm is below this
        value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.EPS_IRAC_SWITCH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_EPS_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Targeted accuracy during the refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.EPS_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_EPS_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy of the taylor expansion for the matrix functions, should normally
        be kept as is.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.EPS_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_GOLD_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target relative uncertainty in the location of the minimum for LINESEARCH GOLD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.GOLD_TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_IRAC_DEGREE = Quantity(
        type=str,
        shape=[],
        description='''
        The refinement polynomial degree (2, 3 or 4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.IRAC_DEGREE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_LINESEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the OT minimizer, in increasing order of
        robustness and cost. MINIMIZER CG combined with LINESEARCH GOLD should always find
        an electronic minimum.  Whereas the 2PNT minimizer is almost always OK, 3PNT might
        be needed for systems in which successive OT CG steps do not decrease the total
        energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.LINESEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_MAX_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.MAX_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_MAX_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum order of the Taylor expansion before diagonalisation is prefered, for
        large parallel runs a slightly higher order could sometimes result in a small
        speedup.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.MAX_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_MINIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Minimizer to be used with the OT method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.MINIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_MIXED_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a mixed precision algorithm.With a well behaved basis set (i.e. condition
        number less than 1/eps_sp)it provides double precision accuracy results and up to
        a 2 fold speedup for building and applying the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.MIXED_PRECISION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_N_HISTORY_VEC = Quantity(
        type=str,
        shape=[],
        description='''
        Number of history vectors to be used with DIIS or BROYDEN
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.N_HISTORY_VEC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_NONDIAG_ENERGY_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        The prefactor for the non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.NONDIAG_ENERGY_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_NONDIAG_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Add a non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.NONDIAG_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_OCCUPATION_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Preconditioner with the occupation numbers (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.OCCUPATION_PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ON_THE_FLY_LOC = Quantity(
        type=str,
        shape=[],
        description='''
        On the fly localization of the molecular orbitals. Can only be used with OT/IRAC.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ON_THE_FLY_LOC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ORTHO_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        The orthogonality method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ORTHO_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes. They differ in
        effectiveness, cost of construction, cost of application. Properly preconditioned
        minimization can be orders of magnitude faster than doing nothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_ROTATION = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional variables so that rotations of the occupied subspace are
        allowed as well, only needed for cases where the energy is not invariant under  a
        rotation of the occupied subspace such as non-singlet restricted calculations  or
        fractional occupations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.ROTATION'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_SAFE_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Reject DIIS steps if they point away from the minimum, do SD in that case.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.SAFE_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_SCP_NDDO = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional self-consistent polarization through response basis set =
        orbital basis set for NDDO.)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.SCP_NDDO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the ot method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OT_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial stepsize used for the line search, sometimes this parameter can be reduced
        to stablize DIIS or to improve the CG behavior in the first few steps. The optimal
        value depends on the quality of the preconditioner. A negative values leaves the
        choice to CP2K depending on the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OT.STEPSIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OUTER_SCF(MSection):
    '''
    parameters controlling the outer SCF loop
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.OUTER_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_BISECT_TRUST_COUNT = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of times the same point will be used in bisection, a small number
        guards against the effect of wrongly converged states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.BISECT_TRUST_COUNT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_DIIS_BUFFER_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of DIIS vectors used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.DIIS_BUFFER_LENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The target gradient of the outer scf variables. Notice that the EPS_SCF of the
        inner loop also determines the value that can be reached in the outer loop,
        typically EPS_SCF of the outer loop must be smaller than EPS_SCF of the inner
        loop.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_EXTRAPOLATION_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of past states used in the extrapolation of the variables during e.g. MD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.EXTRAPOLATION_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum number of outer loops
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Method used to bring the outer loop to a stationary point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.OPTIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the outer SCF loop
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        The initial step_size used in the optimizer (currently steepest descent).Note that
        in cases where a sadle point is sought for (DDAPC_CONSTRAINT), this can be
        negative
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.STEP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_OUTER_SCF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies which kind of outer SCF should be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.OUTER_SCF.TYPE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF_SMEAR(MSection):
    '''
    Define the smearing of the MO occupation numbers
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.SMEAR'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_ELECTRONIC_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Electronic temperature in the case of Fermi-Dirac smearing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.ELECTRONIC_TEMPERATURE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_EPS_FERMI_DIRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy checks on occupation numbers use this as a tolerance
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.EPS_FERMI_DIRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_FIXED_MAGNETIC_MOMENT = Quantity(
        type=str,
        shape=[],
        description='''
        Imposed difference between the numbers of electrons of spin up and spin down: m =
        n(up) - n(down). A negative value (default) allows for a change of the magnetic
        moment. -1 specifically keeps an integer number of spin up and spin down
        electrons.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.FIXED_MAGNETIC_MOMENT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A list of fractional occupations to use. Must match the number of states and sum
        up to the correct number of electrons
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Smearing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of smearing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SMEAR_WINDOW_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the energy window centred at the Fermi level
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SMEAR.WINDOW_SIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCF(MSection):
    '''
    parameters needed perform an scf run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_ADDED_MOS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of additional MOS added for each spin
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.ADDED_MOS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_CHOLESKY = Quantity(
        type=str,
        shape=[],
        description='''
        If the cholesky method should be used for computing the inverse of S, and in this
        case calling which Lapack routines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.CHOLESKY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_EPS_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold on the convergence to start using DIAG/DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.EPS_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_EPS_EIGVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Throw away linear combinations of basis functions with a small eigenvalue in S
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.EPS_EIGVAL'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_EPS_LUMO = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy of the computation of the lumo energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.EPS_LUMO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_EPS_SCF_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the scf convergence after the history pipeline is filled
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.EPS_SCF_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the scf convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_LEVEL_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Use level shifting to improve convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.LEVEL_SHIFT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MAX_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of DIIS vectors to be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MAX_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MAX_ITER_LUMO = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum number of iteration for the lumo computation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MAX_ITER_LUMO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MAX_SCF_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCF iterations after the history pipeline is filled
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MAX_SCF_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCF iteration to be performed for one optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_NCOL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the number of columns in a scalapack block
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.NCOL_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_NROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        sets the number of rows in a scalapack block
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.NROW_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_ROKS_F = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to define the parameter f for the general ROKS scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.ROKS_F'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_ROKS_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to define all parameters for the high-spin ROKS scheme explicitly. The full
        set of 6 parameters has to be specified in the order acc, bcc, aoo, boo, avv, bvv
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.ROKS_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_ROKS_SCHEME = Quantity(
        type=str,
        shape=[],
        description='''
        Selects the ROKS scheme when ROKS is applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.ROKS_SCHEME'))

    x_cp2k_input_FORCE_EVAL_DFT_SCF_SCF_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        Change the initial guess for the wavefunction.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCF.SCF_GUESS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_DIAGONALIZATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.DIAGONALIZATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_MIXING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_MIXING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.MIXING'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.OT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OUTER_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_OUTER_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.OUTER_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF_SMEAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF_SMEAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF.SMEAR'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER(MSection):
    '''
    Defines the center of the sphere.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Defines a list of atoms to define the center of the sphere
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER.ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER_FIXED = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the center of the sphere should be fixed or allowed to move
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER.FIXED'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER_WEIGHT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the weight used to define the center of the sphere (if ATOM_LIST is
        provided)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER.WEIGHT_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Coordinates of the center of the sphere
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE(MSection):
    '''
    Treats the implicit solvent environment like a sphere
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.SPHERE'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_SPHERE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the spherical cavity in the dielectric medium
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.SPHERE.RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE_CENTER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.SPHERE.CENTER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SCRF(MSection):
    '''
    Adds an implicit solvation model to the DFT calculation. Know also as Self Consistent
    Reaction Field.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_EPS_OUT = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the dielectric constant outside the sphere
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.EPS_OUT'))

    x_cp2k_input_FORCE_EVAL_DFT_SCRF_LMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum value of L used in the multipole expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SCRF.LMAX'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCRF_SPHERE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF.SPHERE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_SIC(MSection):
    '''
    parameters for the self interaction correction
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SIC'))

    x_cp2k_input_FORCE_EVAL_DFT_SIC_ORBITAL_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Type of orbitals treated with the SIC
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SIC.ORBITAL_SET'))

    x_cp2k_input_FORCE_EVAL_DFT_SIC_SIC_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method used to remove the self interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SIC.SIC_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_SIC_SIC_SCALING_A = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the coulomb term in sic [experimental]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SIC.SIC_SCALING_A'))

    x_cp2k_input_FORCE_EVAL_DFT_SIC_SIC_SCALING_B = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the xc term in sic [experimental]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SIC.SIC_SCALING_B'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_SIC(MSection):
    '''
    parameters for the self interaction correction
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.SIC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_SIC_ORBITAL_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Type of orbitals treated with the SIC
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.SIC.ORBITAL_SET'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_SIC_SIC_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method used to remove the self interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.SIC.SIC_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_SIC_SIC_SCALING_A = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the coulomb term in sic [experimental]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.SIC.SIC_SCALING_A'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_SIC_SIC_SCALING_B = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the xc term in sic [experimental]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.SIC.SIC_SCALING_B'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING(MSection):
    '''
    Parameters for self interation corrected hybrid functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING_FUNCTIONAL_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        Which model for the coupling constant integration should be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING.FUNCTIONAL_MODEL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which Hybrid functional should be used. (Has to be consistent with the definitions
        in XC and HF).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING.FUNCTIONAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        The point to be used along the adiabatic curve (0 &#60; λ &#60; 1)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Long-range parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING.OMEGA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HFX_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.LOAD_BALANCE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.FRACTION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.PW_HFX'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HF_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.HFX_RI'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.LOAD_BALANCE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.MEMORY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.PERIODIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF.SCREENING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL(MSection):
    '''
    Information on the non local dispersion functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the FFT grid used in the calculation of the nonlocal vdW functional
        [Ry].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL_KERNEL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the kernel data file, may include a path.vdW_kernel_table.dat is for DRSLL
        and LMKLL andrVV10_kernel_table.dat is for rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL.KERNEL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Parameters b and C of the rVV10 functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of functional (the corresponding kernel data file should be selected).Allows
        for common forms such as vdW-DF, vdW-DF2, optB88-vdW, rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL.TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for non local functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL.VERBOSE_OUTPUT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD(MSection):
    '''
    Controls the printing of some info about DFTD contributions
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL(MSection):
    '''
    Information on the pair potential to calculate dispersion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOM_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number of a set of atoms for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOM_COORDINATION_NUMBERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOMPARM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies parameters for atom types (in atomic units). If not provided default
        parameters are used (DFT-D2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOMPARM'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_CALCULATE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.CALCULATE_C9_TERM'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,sr6,s8) for the DFT-D3 method, if
        set to zero CP2K attempts to guess the xc functional from REFERENCE_FUNCTIONAL and
        sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3BJ_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,a1,s8,a2) for the DFT-D3(BJ)
        method, if set to zero CP2K attempts to guess the xc functional from
        REFERENCE_FUNCTIONAL and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3BJ_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EPS_CN = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff value for coordination number function (DFT-D3 method)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EPS_CN'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EXP_PRE = Quantity(
        type=str,
        shape=[],
        description='''
        Prefactor in exponential damping factor (DFT-D2 potential)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EXP_PRE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_KIND_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number for a kind for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.KIND_COORDINATION_NUMBERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_LONG_RANGE_CORRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate a long range correction to the DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.LONG_RANGE_CORRECTION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PARAMETER_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the parameter file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PARAMETER_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_R_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Range of potential. The cutoff will be 2 times this value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.R_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model using reference coordination numbers
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_C9_TERM'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Use parameters for this specific density functional. For available D3 and D3(BJ)
        parameters see: http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionals.html,
        http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionalsbj.html
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameter, if set to zero CP2K attempts to guess
        the xc functional that is in use and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for the DFT-D2 and DFT-D3 models
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.VERBOSE_OUTPUT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL(MSection):
    '''
    This section combines all possible additional dispersion corrections to the normal XC
    functionals. This can be more functionals or simple empirical pair potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of dispersion/vdW functional or potential to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_NON_LOCAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL_PAIR_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CPHF(MSection):
    '''
    Parameters influencing the solution of the Z-vector equations in MP2 gradients
    calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.CPHF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CPHF_EPS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence threshold for the solution of the Z-vector equations. The Z-vector
        equations have the form of a linear system of equations Ax=b, convergence is
        achieved when |Ax-b|<=EPS_CONV.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.CPHF.EPS_CONV'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CPHF_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations allowed for the solution of the Z-vector equations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.CPHF.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_DIRECT_CANONICAL(MSection):
    '''
    Parameters influencing the direct canonical method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_DIRECT_CANONICAL_BIG_SEND = Quantity(
        type=str,
        shape=[],
        description='''
        Send big messages between processes (useful for >48 processors).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.DIRECT_CANONICAL.BIG_SEND'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL(MSection):
    '''
    Parameters the interaction potential in computing the biel integrals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, TShPSC operator).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TRUNCATION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines truncation radius for the truncated TShPSC potential. Only valid when
        doing truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TRUNCATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TSHPSC_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file TShPSC.dat that contains the data for the evaluation of the
        TShPSC G0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TSHPSC_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO(MSection):
    '''
    Controls the printing basic info about MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS(MSection):
    '''
    Parameters influencing the optimization of the RI MP2 basis. Only exponents of non-
    contracted auxiliary basis can be optimized. An initial RI auxiliary basis has to be
    specified.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_BASIS_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the size of the auxiliary basis set automatically generated as initial
        guess. This will be effective only if RI_AUX_BASIS_SET in the KIND section and
        NUM_FUNC are not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.BASIS_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_I_REL = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the relative deviation of the amplitudes calculated with and
        without RI approximation, (more details in Chem.Phys.Lett.294(1998)143).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_I_REL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_RI = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the absolute difference between the RI-MP2 and the exact MP2
        energy, DRI=ABS(E_MP2-E_RI-MP2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_EPS_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The derivatives of the MP2 energy with respect to the exponents of the basis are
        calculated numerically. The change in the exponent a_i employed for the numerical
        evaluation is defined as h_i=EPS_DERIV*a_i.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.EPS_DERIV'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of steps in the RI basis optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS_NUM_FUNC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of function, for each angular momentum (s, p, d ...),
        employed in the automatically generated initial guess. This will be effective only
        if RI_AUX_BASIS_SET in the KIND section is not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS.NUM_FUNC'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_LAPLACE(MSection):
    '''
    Parameters influencing the RI-SOS-MP2-Laplace method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_LAPLACE_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-SOS-
        MP2-Laplace method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_LAPLACE.QUADRATURE_POINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_LAPLACE_SIZE_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for the integration in the Laplace method, that is the number of
        processes involved in the computation of each integration point. SIZE_INTEG_GROUP
        has to be a multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1)
        is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_LAPLACE.SIZE_INTEG_GROUP'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2(MSection):
    '''
    Parameters influencing the RI MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for communication in RI-MP2. Larger BLOCK_SIZE
        reduces communication but requires more memory. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_MP2.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2_EPS_CANONICAL = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for discriminate if a given ij pairs of the unrelaxed MP2 density matrix
        has to be calculated with a canonical reformulation based on the occupied
        eigenvalues differences.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_MP2.EPS_CANONICAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2_FREE_HFX_BUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Free the buffer containing the 4 center integrals used in the Hartree-Fock
        exchange calculation. This will be effective only for gradients calculations,
        since for the energy only case, the buffers are released by default. (Right now
        debugging only).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_MP2.FREE_HFX_BUFFER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.FRACTION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA(MSection):
    '''
    Parameters influencing the RI RPA method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_MINIMAX_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Use the Minimax quadrature scheme for performing the numerical integration.
        Maximum number of quadrature point limited to 20.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.MINIMAX_QUADRATURE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_MM_STYLE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix multiplication style for the Q matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.MM_STYLE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-RPA method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.QUADRATURE_POINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_SIZE_FREQ_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for frequency integration, that is the number of processes involved in
        the computation of each integration point. SIZE_FREQ_INTEG_GROUP has to be a
        multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1) is
        automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.SIZE_FREQ_INTEG_GROUP'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA.HF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW(MSection):
    '''
    Parameters for the GPW approach in Wavefunction-based Correlation methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the finest grid level in the MP2 gpw integration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the DBCSR based multiply (usually 10 times smaller than
        EPS_GRID).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW.EPS_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW_EPS_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the GPW based integration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW.EPS_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW_PRINT_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        How much output is written by the individual groups.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW.PRINT_LEVEL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the grid at which a Gaussian is mapped.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW.REL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION(MSection):
    '''
    Sets up the Wavefunction-based Correlation parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CALC_COND_NUM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the condition number of the (P|Q) matrix for the RI methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.CALC_COND_NUM'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_COL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the column block used in the SCALAPACK block cyclic data
        distribution.Default is (COL_BLOCK=-1) is automatic. A proper choice can speedup
        the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.COL_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Group size used in the computation of the integrals. Default is to use all
        processors (GROUP_SIZE=-1).A smaller group size (for example the node size), might
        a better choice if the actual MP2 time is large compared to integral computation
        time. This is usually the case if the total number of processors is not too large.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.GROUP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed total memory usage during MP2 methods [Mb].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Which method should be used to compute the MP2 energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_ROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the row block used in the SCALAPACK block cyclic data distribution.Default
        is (ROW_BLOCK=-1) is automatic. A proper choice can speedup the parallel matrix
        multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.ROW_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_SCALE_S = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the singlet energy component (opposite spin, OS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.SCALE_S'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_SCALE_T = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the triplet energy component (same spin, SS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.SCALE_T'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CPHF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_CPHF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.CPHF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_DIRECT_CANONICAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_DIRECT_CANONICAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_MP2_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_OPT_RI_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_LAPLACE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_LAPLACE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_MP2'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_RI_RPA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION_WFC_GPW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION.WFC_GPW'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC(MSection):
    '''
    Uses the Becke 88 longrange exchange functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR(MSection):
    '''
    Uses the Becke 88 longrange exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88(MSection):
    '''
    Uses the Becke 88 exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97(MSection):
    '''
    Uses the Becke 97 exchange correlation functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the B97 and Grimme parametrization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional, if -1 the default for the given
        parametrization is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL(MSection):
    '''
    Becke Roussel exchange hole model. Can be usedas long range correction with a
    truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff radius for the truncation. If put to zero, the standard full
        range potential will be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter in the exchange hole. Usually this is put to 1.0 or 0.8
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BEEF(MSection):
    '''
    Uses the BEEFvdW exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BEEF_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BEEF.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BEEF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BEEF.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_CS1(MSection):
    '''
    Uses the CS1 functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_CS1_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.CS1.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09(MSection):
    '''
    Combination of three different exchange hole models
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for Becke Roussel hole
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09.GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_HCTH(MSection):
    '''
    Uses the HCTH class of functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_HCTH_PARAMETER_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the parameters should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.HCTH.PARAMETER_SET'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_HCTH_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.HCTH.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_GGA(MSection):
    '''
    Uses one of the KE_GGA functionals (optimized versions of some of these functionals
    might be available outside this section). These functionals are needed for the
    computation of the kinetic energy in the Kim-Gordon method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_GGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the KE_GGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_GGA.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_GGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_GGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC(MSection):
    '''
    To be used for KG runs. Uses kinetic energy functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR(MSection):
    '''
    LDA exchange hole model in truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC(MSection):
    '''
    Uses functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_ADIABATIC(MSection):
    '''
    Uses the LYP correlation functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP_ADIABATIC.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP(MSection):
    '''
    Uses the LYP functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_OPTX(MSection):
    '''
    Uses the OPTX functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_OPTX_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.OPTX.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_OPTX_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.OPTX.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_P86C(MSection):
    '''
    Uses the P86C functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_P86C_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.P86C.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_P86C_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.P86C.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PADE(MSection):
    '''
    Uses the PADE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PADE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PADE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR(MSection):
    '''
    PBE exchange hole model in trucanted coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE(MSection):
    '''
    Uses the PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the different parametrizations of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92(MSection):
    '''
    Uses the PerdewWang correlation functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PW92.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the energy functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PW92.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PW92.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81(MSection):
    '''
    Uses the PZ functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PZ81.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PZ81.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PZ81.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TFW(MSection):
    '''
    Uses the TFW functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TFW_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TFW.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TF(MSection):
    '''
    Uses the TF functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TF.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS(MSection):
    '''
    Uses the TPSS functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TPSS.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TPSS.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TPSS.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN(MSection):
    '''
    Uses the VWN functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the VWN functional should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.VWN.FUNCTIONAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.VWN.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.VWN.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA(MSection):
    '''
    Uses the XALPHA (SLATER) functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XALPHA.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XALPHA.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA_XA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the xa parameter (this does not change the exponent, just the mixing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XALPHA.XA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XGGA(MSection):
    '''
    Uses one of the XGGA functionals (optimized versions of some of these functionals
    might be available outside this section).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XGGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the XGGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XGGA.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XGGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XGGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE(MSection):
    '''
    Uses the short range PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        screening parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE_SCALE_X0 = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the original hole PBE-functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE.SCALE_X0'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL(MSection):
    '''
    The xc functional to use
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Shortcut for the most common functional combinations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE88'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE97'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BEEF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_BEEF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_CS1 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_CS1'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_GV09'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_HCTH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_HCTH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_GGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_GGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_KE_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_LYP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_OPTX = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_OPTX'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_P86C = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_P86C'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PADE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PADE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PW92'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_PZ81'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TFW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TFW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_TPSS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_VWN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XALPHA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XGGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XGGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL_XWPBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL.XWPBE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID(MSection):
    '''
    The xc parameters used when calculating the xc on the grid
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID_USE_FINER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a finer grid only to calculate the xc
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_GRID.USE_FINER_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID_XC_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The method used to compute the derivatives
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_GRID.XC_DERIV'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID_XC_SMOOTH_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        The density smoothing used for the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_GRID.XC_SMOOTH_RHO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP(MSection):
    '''
    Uses the SAOP potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.SAOP'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the alpha parameter (default = 1.19).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.SAOP.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the beta parameter (default = 0.01).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.SAOP.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP_K_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the K_rho parameter (default = 0.42).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.SAOP.K_RHO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL(MSection):
    '''
    The xc potential to use (CAREFUL: xc potential here refers to potentials that are not
    derived from an xc functional, but rather are modelled directly. Therefore there is no
    consistent xc energy available. To still get an energy expression, see ENERGY below
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        How to determine the total energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.ENERGY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL_SAOP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL.SAOP'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC(MSection):
    '''
    parameters needed calculate the xc potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_DENSITY_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.DENSITY_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_DENSITY_SMOOTH_CUTOFF_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for the smoothing procedure inxc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.DENSITY_SMOOTH_CUTOFF_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_FUNCTIONAL_ROUTINE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the code for xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.FUNCTIONAL_ROUTINE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_GRADIENT_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the gradient of the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.GRADIENT_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_XC_TAU_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on tau used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.XC.TAU_CUTOFF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_ADIABATIC_RESCALING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.ADIABATIC_RESCALING'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.HF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_VDW_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.VDW_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_WF_CORRELATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.WF_CORRELATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_FUNCTIONAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_FUNCTIONAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_GRID'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC_XC_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC.XC_POTENTIAL'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT(MSection):
    '''
    parameters needed to set up the Time Dependent Density Functional PT
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_CONVERGENCE = Quantity(
        type=str,
        shape=[],
        description='''
        The convergence of the eigenvalues
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.CONVERGENCE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_DIAG_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Diagonalization method used in tddfpt
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.DIAG_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_INVERT_S = Quantity(
        type=str,
        shape=[],
        description='''
        use the inverse of the overlap matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.INVERT_S'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_KERNEL = Quantity(
        type=str,
        shape=[],
        description='''
        compute the kernel (debug purpose only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.KERNEL'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_LSD_SINGLETS = Quantity(
        type=str,
        shape=[],
        description='''
        compute singlets using lsd vxc kernel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.LSD_SINGLETS'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_MAX_KV = Quantity(
        type=str,
        shape=[],
        description='''
        maximal number of Krylov space vectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.MAX_KV'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_NEV = Quantity(
        type=str,
        shape=[],
        description='''
        number of excitations to calculate
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.NEV'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_NLUMO = Quantity(
        type=str,
        shape=[],
        description='''
        number of additional unoccupied orbitals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.NLUMO'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_NREORTHO = Quantity(
        type=str,
        shape=[],
        description='''
        number of reorthogonalization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.NREORTHO'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_OE_CORR = Quantity(
        type=str,
        shape=[],
        description='''
        Which type of orbital eigenvalue correction to use\\n(to yield better HOMO-LUMO
        energies)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.OE_CORR'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        use the preconditioner (only for Davidson)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_RES_ETYPE = Quantity(
        type=str,
        shape=[],
        description='''
        (singlets/triplets) for restricted calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.RES_ETYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_TDDFPT_RESTARTS = Quantity(
        type=str,
        shape=[],
        description='''
        maximal number subspace search restarts
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TDDFPT.RESTARTS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_SIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_SIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.SIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT_XC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT.XC'))


class x_cp2k_section_input_FORCE_EVAL_DFT_TRANSPORT(MSection):
    '''
    Specifies the parameters for transport, sets parameters for the OMEN code, see also
    http://www.nano-tcad.ethz.ch/
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TRANSPORT'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_BANDWIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        The number of neighboring unit cells that one unit cell interacts with.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.BANDWIDTH'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_COLZERO_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        The smallest number that is not zero in the full diagonalization part.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.COLZERO_THRESHOLD'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_CORES_PER_NODE = Quantity(
        type=str,
        shape=[],
        description='''
        Number of cores per node.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.CORES_PER_NODE'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_DENSITY_MATRIX_CONSTRUCTION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method used for constructing the density matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.DENSITY_MATRIX_CONSTRUCTION_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_ENERGY_INTERVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Average distance for big intervals in energy vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.ENERGY_INTERVAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_EPS_DECAY = Quantity(
        type=str,
        shape=[],
        description='''
        The smallest imaginary part that a decaying eigenvalue may have not to be
        considered as propagating.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.EPS_DECAY'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_EPS_EIGVAL_DEGEN = Quantity(
        type=str,
        shape=[],
        description='''
        Filter for degenerate bands in the injection vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.EPS_EIGVAL_DEGEN'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_EPS_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        The smallest eigenvalue that is kept.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.EPS_LIMIT'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_EPS_MU = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy to which the Fermi level should be determined.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.EPS_MU'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_EPS_SINGULARITY_CURVATURES = Quantity(
        type=str,
        shape=[],
        description='''
        Filter for degenerate bands in the bandstructure.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.EPS_SINGULARITY_CURVATURES'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_MIN_INTERVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Smallest enery distance in energy vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.MIN_INTERVAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_N_ABSCISSAE = Quantity(
        type=str,
        shape=[],
        description='''
        The number of abscissae per integration interval on the real axis.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.N_ABSCISSAE'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_N_CELLS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of unit cells.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.N_CELLS'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_N_DOF = Quantity(
        type=str,
        shape=[],
        description='''
        Number of degrees of freedom for the contact unit cell.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.N_DOF'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_N_KPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of k points for determination of the singularities.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.N_KPOINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_NUM_CONTACTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of contacts.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.NUM_CONTACTS'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_NUM_INTERVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Max number of energy points per small interval.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.NUM_INTERVAL'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_TASKS_PER_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Number of tasks per energy point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.TASKS_PER_POINT'))

    x_cp2k_input_FORCE_EVAL_DFT_TRANSPORT_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Temperature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.TRANSPORT.TEMPERATURE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_LOCALIZE(MSection):
    '''
    Use one of the available methods to define the localization  and possibly to optimize
    it to a minimum or a maximum.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.LOCALIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_CRAZY_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scale angles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.CRAZY_SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_CRAZY_USE_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Use diagonalization (slow) or pade based calculation of matrix exponentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.CRAZY_USE_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_ENERGY_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the orbitals to be localized within the given energy range.This type of
        selection cannot be added on top of the selection through a LIST. It reads to
        reals that are lower and higher boundaries of the energy range.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.ENERGY_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_EPS_LOCALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance used in the convergence criterium of the localization methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.EPS_LOCALIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_EPS_OCCUPATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance in the occupation number to select only fully occupied orbitals for the
        rotation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.EPS_OCCUPATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_JACOBI_FALLBACK = Quantity(
        type=str,
        shape=[],
        description='''
        Use Jacobi method in case no convergence was achieved by using the crazy rotations
        method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.JACOBI_FALLBACK'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_LIST_UNOCCUPIED = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the unoccupied states to be localized, up to now only valid in
        combination with GPW. This keyword has to be present if unoccupied states should
        be localized. This keyword can be repeated several times(useful if you have to
        specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.LIST_UNOCCUPIED'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the occupied wfn to be localizedThis keyword can be repeated several
        times(useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_LOCHOMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for occupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.LOCHOMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_LOCLUMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for unoccupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.LOCLUMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_MAX_CRAZY_ANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Largest allowed angle for the crazy rotations algorithm (smaller is slower but
        more stable).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.MAX_CRAZY_ANGLE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations used for localization methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method of optimization if any
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_MIN_OR_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Requires the maximization of the spread of the wfn
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.MIN_OR_MAX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_OPERATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Type of opertator which defines the spread functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.OPERATOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_OUT_ITER_EACH = Quantity(
        type=str,
        shape=[],
        description='''
        Every how many iterations of the localization algorithm(Jacobi) the tolerance
        value is printed out
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.OUT_ITER_EACH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the localization from a set of orbitals read from a localization restart
        file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.RESTART'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the MOS localization procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_STATES = Quantity(
        type=str,
        shape=[],
        description='''
        Which states to localize, LUMO up to now only available in GPW
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.STATES'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_LOCALIZE_USE_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Generate an improved initial guess based on a history of results, which is useful
        during MD.Will only work if the number of states to be localized remains constant.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.LOCALIZE.USE_HISTORY'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON(MSection):
    '''
    Settings for DAVIDSON
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_CONV_MOS_PERCENT = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal percent of MOS that have to converge within the Davidson loop before the
        SCF iteration is completed and a new Hamiltonian is computed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.CONV_MOS_PERCENT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (0.001 doing normally fine). For the
        other preconditioners, making this value larger (0.2) will tame the preconditioner
        in case of poor initial guesses.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_FIRST_PREC = Quantity(
        type=str,
        shape=[],
        description='''
        First SCF iteration at which a Preconditioner is employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.FIRST_PREC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_NEW_PREC_EACH = Quantity(
        type=str,
        shape=[],
        description='''
        Number of SCF iterations after which a new Preconditioner is computed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.NEW_PREC_EACH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON_SPARSE_MOS = Quantity(
        type=str,
        shape=[],
        description='''
        Use MOS as sparse matrix and avoid as much as possible multiplications with full
        matrices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON.SPARSE_MOS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING(MSection):
    '''
    Define type and parameters for mixingprocedures to be applied to the density matrix.
    Normally, only one type of mixing method should be accepted. The mixing procedures
    activated by this section are only active for diagonalization methods, i.e. not with
    minimization methods based on OT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be included
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Denominator parameter in Kerker damping introduced to suppress charge sloshing:
        rho_mix(g) =rho_in(g) + alpha*g^2/(g^2 + beta^2)*(rho_out(g)-rho_in(g))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_W0 = Quantity(
        type=str,
        shape=[],
        description='''
        w0 parameter used in Broyden mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_W0'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_WMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WMAX
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_WMAX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_BROY_WREF = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WREF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.BROY_WREF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_MAX_GVEC_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Restricts the G-space mixing to lower part of G-vector spectrum, up to a G0, by
        assigning the exponent of the Gaussian that can be represented by vectors smaller
        than G0 within a certain accuracy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.MAX_GVEC_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_MAX_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Upper bound for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.MAX_STEP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_N_SIMPLE_MIX = Quantity(
        type=str,
        shape=[],
        description='''
        Number of kerker damping iterations before starting other mixing procedures
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.N_SIMPLE_MIX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NBUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of previous steps stored for the actual mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NBUFFER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NMIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal number of density mixing (should be greater than 0),before starting DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NMIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_NSKIP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of initial iteration for which the mixing is skipped
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.NSKIP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_PULAY_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be added to the Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.PULAY_ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_PULAY_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of residual contribution to be added to Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.PULAY_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_R_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Control factor for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.R_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_REGULARIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Regularization parameter to stabilize the inversion of the residual matrix {Yn^t
        Yn} in the multisecant mixing scheme (noise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.REGULARIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the mixing procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF(MSection):
    '''
    Activation of self-consistenf subspace refinement by diagonalization of H by adjusting
    the occupation but keeping the MOS unchanged.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_ADAPT_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Required density matrix accuracy as compared to current SCF convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_ADAPT_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_ENE = Quantity(
        type=str,
        shape=[],
        description='''
        Required energy accuracy for convergence of subspace diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_ENE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_EPS_SKIP_SUB_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Level of convergence to be reached before starting the internal loop of subspace
        rotations. Above this threshold only the outer diagonalization method is used.  If
        negative the subspace rotation is started at the first iteration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.EPS_SKIP_SUB_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations for the SCF inner loop
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of inner SCF loop to refine occupations in MOS subspace
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF_MIXING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF.MIXING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV(MSection):
    '''
    Settings for KRYLOV
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV_CHECK_MOS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        This requires to check the convergence of MOS also when standard diagonalization
        steps are performed, if the block krylov approach is active.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV.CHECK_MOS_CONV'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV_EPS_KRYLOV = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterion for the MOs
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV.EPS_KRYLOV'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV_EPS_STD_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Level of convergence to be reached before starting the Lanczos procedure. Above
        this threshold a standard diagonalization method is used.  If negative Lanczos is
        started at the first iteration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV.EPS_STD_DIAG'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV_NBLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the block of vectors refined simultaneously by the Lanczos procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV.NBLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV_NKRYLOV = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension of the Krylov space used for the Lanczos refinement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV.NKRYLOV'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT(MSection):
    '''
    Sets the various options for the orbital transformation (OT) method. Default settings
    already provide an efficient, yet robust method. Most systems benefit from using the
    FULL_ALL preconditioner combined with a small value (0.001) of ENERGY_GAP.Well-behaved
    systems might benefit from using a DIIS minimizer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for OT
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_ADAPTIVE_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Enable adaptive curvature estimation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_ADAPTIVE_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Underrelaxation for the broyden mixer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_ENABLE_FLIP = Quantity(
        type=str,
        shape=[],
        description='''
        Ensure positive definite update
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_ENABLE_FLIP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_ETA = Quantity(
        type=str,
        shape=[],
        description='''
        Dampening of estimated energy curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_ETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_FORGET_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Forget history on bad approximation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_FORGET_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Backtracking parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Growth limit of curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA_DECREASE = Quantity(
        type=str,
        shape=[],
        description='''
        Reduction of curvature on bad approximation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA_DECREASE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum adaptive curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA_MIN'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_BROYDEN_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Curvature of energy functional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.BROYDEN_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ENERGIES = Quantity(
        type=str,
        shape=[],
        description='''
        Optimize orbital energies for use in Fermi-Dirac smearing (requires ROTATION and
        FD smearing to be active).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ENERGIES'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (can be a small number, e.g. 0.002).
        FULL_SINGLE_INVERSE takes it as lower bound (values below 0.05 can cause stability
        issues). In general, heigher values will tame the preconditioner in case of poor
        initial guesses. A negative value will leave the choice to CP2K depending on type
        of preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_EPS_IRAC_FILTER_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the threshold for filtering the matrices.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.EPS_IRAC_FILTER_MATRIX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_EPS_IRAC_QUICK_EXIT = Quantity(
        type=str,
        shape=[],
        description='''
        Only one extra refinement iteration is done when the norm is below this value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.EPS_IRAC_QUICK_EXIT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_EPS_IRAC_SWITCH = Quantity(
        type=str,
        shape=[],
        description='''
        The algorithm switches to the polynomial refinement when the norm is below this
        value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.EPS_IRAC_SWITCH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_EPS_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Targeted accuracy during the refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.EPS_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_EPS_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy of the taylor expansion for the matrix functions, should normally
        be kept as is.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.EPS_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_GOLD_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target relative uncertainty in the location of the minimum for LINESEARCH GOLD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.GOLD_TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_IRAC_DEGREE = Quantity(
        type=str,
        shape=[],
        description='''
        The refinement polynomial degree (2, 3 or 4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.IRAC_DEGREE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_LINESEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the OT minimizer, in increasing order of
        robustness and cost. MINIMIZER CG combined with LINESEARCH GOLD should always find
        an electronic minimum.  Whereas the 2PNT minimizer is almost always OK, 3PNT might
        be needed for systems in which successive OT CG steps do not decrease the total
        energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.LINESEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_MAX_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.MAX_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_MAX_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum order of the Taylor expansion before diagonalisation is prefered, for
        large parallel runs a slightly higher order could sometimes result in a small
        speedup.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.MAX_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_MINIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Minimizer to be used with the OT method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.MINIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_MIXED_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a mixed precision algorithm.With a well behaved basis set (i.e. condition
        number less than 1/eps_sp)it provides double precision accuracy results and up to
        a 2 fold speedup for building and applying the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.MIXED_PRECISION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_N_HISTORY_VEC = Quantity(
        type=str,
        shape=[],
        description='''
        Number of history vectors to be used with DIIS or BROYDEN
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.N_HISTORY_VEC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_NONDIAG_ENERGY_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        The prefactor for the non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.NONDIAG_ENERGY_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_NONDIAG_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Add a non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.NONDIAG_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_OCCUPATION_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Preconditioner with the occupation numbers (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.OCCUPATION_PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ON_THE_FLY_LOC = Quantity(
        type=str,
        shape=[],
        description='''
        On the fly localization of the molecular orbitals. Can only be used with OT/IRAC.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ON_THE_FLY_LOC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ORTHO_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        The orthogonality method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ORTHO_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes. They differ in
        effectiveness, cost of construction, cost of application. Properly preconditioned
        minimization can be orders of magnitude faster than doing nothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_ROTATION = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional variables so that rotations of the occupied subspace are
        allowed as well, only needed for cases where the energy is not invariant under  a
        rotation of the occupied subspace such as non-singlet restricted calculations  or
        fractional occupations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.ROTATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_SAFE_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Reject DIIS steps if they point away from the minimum, do SD in that case.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.SAFE_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_SCP_NDDO = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional self-consistent polarization through response basis set =
        orbital basis set for NDDO.)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.SCP_NDDO'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the ot method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial stepsize used for the line search, sometimes this parameter can be reduced
        to stablize DIIS or to improve the CG behavior in the first few steps. The optimal
        value depends on the quality of the preconditioner. A negative values leaves the
        choice to CP2K depending on the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT.STEPSIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION(MSection):
    '''
    Set up type and parameters for Kohn-Sham matrix diagonalization.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_EPS_ADAPT = Quantity(
        type=str,
        shape=[],
        description='''
        Required accuracy in iterative diagonalization as compared to current SCF
        convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.EPS_ADAPT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_EPS_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Required accuracy in iterative diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.EPS_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_EPS_JACOBI = Quantity(
        type=str,
        shape=[],
        description='''
        Below this threshold value for the SCF convergence the pseudo-diagonalization
        method using Jacobi rotations is activated. This method is much faster than a real
        diagonalization and it is even speeding up while achieving full
        convergence.However, it needs a pre-converged wavefunction obtained by at least
        one real diagonalization which is further optimized while keeping the original
        eigenvalue spectrum. The MO eigenvalues are NOT updated. The method might be
        useful to speed up calculations for large systems e.g. using a semi-empirical
        method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.EPS_JACOBI'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_JACOBI_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the accuracy of the pseudo-diagonalization method using Jacobi rotations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.JACOBI_THRESHOLD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in iterative diagonalization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the diagonalization method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DAVIDSON'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DAVIDSON'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_DIAG_SUB_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.DIAG_SUB_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_KRYLOV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.KRYLOV'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION_OT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION.OT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_MIXING(MSection):
    '''
    Define type and parameters for mixingprocedures to be applied to the density matrix.
    Normally, only one type of mixing method should be accepted. The mixing procedures
    activated by this section are only active for diagonalization methods, i.e. not with
    minimization methods based on OT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.MIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be included
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Denominator parameter in Kerker damping introduced to suppress charge sloshing:
        rho_mix(g) =rho_in(g) + alpha*g^2/(g^2 + beta^2)*(rho_out(g)-rho_in(g))
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_BROY_W0 = Quantity(
        type=str,
        shape=[],
        description='''
        w0 parameter used in Broyden mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.BROY_W0'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_BROY_WMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WMAX
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.BROY_WMAX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_BROY_WREF = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for BROY_WREF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.BROY_WREF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_MAX_GVEC_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Restricts the G-space mixing to lower part of G-vector spectrum, up to a G0, by
        assigning the exponent of the Gaussian that can be represented by vectors smaller
        than G0 within a certain accuracy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.MAX_GVEC_EXP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_MAX_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Upper bound for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.MAX_STEP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_N_SIMPLE_MIX = Quantity(
        type=str,
        shape=[],
        description='''
        Number of kerker damping iterations before starting other mixing procedures
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.N_SIMPLE_MIX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_NBUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of previous steps stored for the actual mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.NBUFFER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_NMIXING = Quantity(
        type=str,
        shape=[],
        description='''
        Minimal number of density mixing (should be greater than 0),before starting DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.NMIXING'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_NSKIP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of initial iteration for which the mixing is skipped
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.NSKIP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_PULAY_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of new density to be added to the Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.PULAY_ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_PULAY_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of residual contribution to be added to Pulay expansion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.PULAY_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_R_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Control factor for the magnitude of the unpredicted step size in the update by the
        multisecant mixing scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.R_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_REGULARIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Regularization parameter to stabilize the inversion of the residual matrix {Yn^t
        Yn} in the multisecant mixing scheme (noise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.REGULARIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MIXING_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the mixing procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MIXING.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OT(MSection):
    '''
    Sets the various options for the orbital transformation (OT) method. Default settings
    already provide an efficient, yet robust method. Most systems benefit from using the
    FULL_ALL preconditioner combined with a small value (0.001) of ENERGY_GAP.Well-behaved
    systems might benefit from using a DIIS minimizer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.OT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ALGORITHM = Quantity(
        type=str,
        shape=[],
        description='''
        Algorithm to be used for OT
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ALGORITHM'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_ADAPTIVE_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Enable adaptive curvature estimation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_ADAPTIVE_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Underrelaxation for the broyden mixer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_ENABLE_FLIP = Quantity(
        type=str,
        shape=[],
        description='''
        Ensure positive definite update
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_ENABLE_FLIP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_ETA = Quantity(
        type=str,
        shape=[],
        description='''
        Dampening of estimated energy curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_ETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_FORGET_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Forget history on bad approximation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_FORGET_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Backtracking parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Growth limit of curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_SIGMA_DECREASE = Quantity(
        type=str,
        shape=[],
        description='''
        Reduction of curvature on bad approximation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_SIGMA_DECREASE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_SIGMA_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum adaptive curvature.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_SIGMA_MIN'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_BROYDEN_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Curvature of energy functional.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.BROYDEN_SIGMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ENERGIES = Quantity(
        type=str,
        shape=[],
        description='''
        Optimize orbital energies for use in Fermi-Dirac smearing (requires ROTATION and
        FD smearing to be active).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ENERGIES'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Should be an estimate for the energy gap [a.u.] (HOMO-LUMO) and is used in
        preconditioning, especially effective with the FULL_ALL preconditioner, in which
        case it should be an underestimate of the gap (can be a small number, e.g. 0.002).
        FULL_SINGLE_INVERSE takes it as lower bound (values below 0.05 can cause stability
        issues). In general, heigher values will tame the preconditioner in case of poor
        initial guesses. A negative value will leave the choice to CP2K depending on type
        of preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_EPS_IRAC_FILTER_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the threshold for filtering the matrices.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.EPS_IRAC_FILTER_MATRIX'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_EPS_IRAC_QUICK_EXIT = Quantity(
        type=str,
        shape=[],
        description='''
        Only one extra refinement iteration is done when the norm is below this value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.EPS_IRAC_QUICK_EXIT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_EPS_IRAC_SWITCH = Quantity(
        type=str,
        shape=[],
        description='''
        The algorithm switches to the polynomial refinement when the norm is below this
        value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.EPS_IRAC_SWITCH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_EPS_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Targeted accuracy during the refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.EPS_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_EPS_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy of the taylor expansion for the matrix functions, should normally
        be kept as is.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.EPS_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_GOLD_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target relative uncertainty in the location of the minimum for LINESEARCH GOLD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.GOLD_TARGET'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_IRAC_DEGREE = Quantity(
        type=str,
        shape=[],
        description='''
        The refinement polynomial degree (2, 3 or 4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.IRAC_DEGREE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_LINESEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the OT minimizer, in increasing order of
        robustness and cost. MINIMIZER CG combined with LINESEARCH GOLD should always find
        an electronic minimum.  Whereas the 2PNT minimizer is almost always OK, 3PNT might
        be needed for systems in which successive OT CG steps do not decrease the total
        energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.LINESEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_MAX_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed refinement iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.MAX_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_MAX_TAYLOR = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum order of the Taylor expansion before diagonalisation is prefered, for
        large parallel runs a slightly higher order could sometimes result in a small
        speedup.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.MAX_TAYLOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_MINIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Minimizer to be used with the OT method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.MINIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_MIXED_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a mixed precision algorithm.With a well behaved basis set (i.e. condition
        number less than 1/eps_sp)it provides double precision accuracy results and up to
        a 2 fold speedup for building and applying the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.MIXED_PRECISION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_N_HISTORY_VEC = Quantity(
        type=str,
        shape=[],
        description='''
        Number of history vectors to be used with DIIS or BROYDEN
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.N_HISTORY_VEC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_NONDIAG_ENERGY_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        The prefactor for the non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.NONDIAG_ENERGY_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_NONDIAG_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Add a non-diagonal energy penalty (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.NONDIAG_ENERGY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_OCCUPATION_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Preconditioner with the occupation numbers (FD smearing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.OCCUPATION_PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ON_THE_FLY_LOC = Quantity(
        type=str,
        shape=[],
        description='''
        On the fly localization of the molecular orbitals. Can only be used with OT/IRAC.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ON_THE_FLY_LOC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ORTHO_IRAC = Quantity(
        type=str,
        shape=[],
        description='''
        The orthogonality method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ORTHO_IRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_PRECOND_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        How the preconditioner is applied to the residual.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.PRECOND_SOLVER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes. They differ in
        effectiveness, cost of construction, cost of application. Properly preconditioned
        minimization can be orders of magnitude faster than doing nothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_ROTATION = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional variables so that rotations of the occupied subspace are
        allowed as well, only needed for cases where the energy is not invariant under  a
        rotation of the occupied subspace such as non-singlet restricted calculations  or
        fractional occupations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.ROTATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_SAFE_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Reject DIIS steps if they point away from the minimum, do SD in that case.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.SAFE_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_SCP_NDDO = Quantity(
        type=str,
        shape=[],
        description='''
        Introduce additional self-consistent polarization through response basis set =
        orbital basis set for NDDO.)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.SCP_NDDO'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the ot method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OT_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial stepsize used for the line search, sometimes this parameter can be reduced
        to stablize DIIS or to improve the CG behavior in the first few steps. The optimal
        value depends on the quality of the preconditioner. A negative values leaves the
        choice to CP2K depending on the preconditioner.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OT.STEPSIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF(MSection):
    '''
    parameters controlling the outer SCF loop
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_BISECT_TRUST_COUNT = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of times the same point will be used in bisection, a small number
        guards against the effect of wrongly converged states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.BISECT_TRUST_COUNT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_DIIS_BUFFER_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of DIIS vectors used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.DIIS_BUFFER_LENGTH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The target gradient of the outer scf variables. Notice that the EPS_SCF of the
        inner loop also determines the value that can be reached in the outer loop,
        typically EPS_SCF of the outer loop must be smaller than EPS_SCF of the inner
        loop.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_EXTRAPOLATION_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Number of past states used in the extrapolation of the variables during e.g. MD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.EXTRAPOLATION_ORDER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum number of outer loops
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Method used to bring the outer loop to a stationary point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.OPTIMIZER'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the outer SCF loop
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        The initial step_size used in the optimizer (currently steepest descent).Note that
        in cases where a sadle point is sought for (DDAPC_CONSTRAINT), this can be
        negative
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.STEP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies which kind of outer SCF should be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF.TYPE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR(MSection):
    '''
    Define the smearing of the MO occupation numbers
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_ELECTRONIC_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Electronic temperature in the case of Fermi-Dirac smearing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.ELECTRONIC_TEMPERATURE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_EPS_FERMI_DIRAC = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy checks on occupation numbers use this as a tolerance
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.EPS_FERMI_DIRAC'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_FIXED_MAGNETIC_MOMENT = Quantity(
        type=str,
        shape=[],
        description='''
        Imposed difference between the numbers of electrons of spin up and spin down: m =
        n(up) - n(down). A negative value (default) allows for a change of the magnetic
        moment. -1 specifically keeps an integer number of spin up and spin down
        electrons.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.FIXED_MAGNETIC_MOMENT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A list of fractional occupations to use. Must match the number of states and sum
        up to the correct number of electrons
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Smearing method to be applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of smearing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR_WINDOW_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the energy window centred at the Fermi level
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR.WINDOW_SIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF(MSection):
    '''
    parameters needed perform an scf run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_ADDED_MOS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of additional MOS added for each spin
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.ADDED_MOS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_CHOLESKY = Quantity(
        type=str,
        shape=[],
        description='''
        If the cholesky method should be used for computing the inverse of S, and in this
        case calling which Lapack routines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.CHOLESKY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_EPS_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold on the convergence to start using DIAG/DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.EPS_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_EPS_EIGVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Throw away linear combinations of basis functions with a small eigenvalue in S
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.EPS_EIGVAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_EPS_LUMO = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy of the computation of the lumo energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.EPS_LUMO'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_EPS_SCF_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the scf convergence after the history pipeline is filled
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.EPS_SCF_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the scf convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_LEVEL_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Use level shifting to improve convergence
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.LEVEL_SHIFT'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MAX_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of DIIS vectors to be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MAX_DIIS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MAX_ITER_LUMO = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum number of iteration for the lumo computation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MAX_ITER_LUMO'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MAX_SCF_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCF iterations after the history pipeline is filled
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MAX_SCF_HISTORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of SCF iteration to be performed for one optimization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_NCOL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the number of columns in a scalapack block
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.NCOL_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_NROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        sets the number of rows in a scalapack block
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.NROW_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_ROKS_F = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to define the parameter f for the general ROKS scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.ROKS_F'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_ROKS_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to define all parameters for the high-spin ROKS scheme explicitly. The full
        set of 6 parameters has to be specified in the order acc, bcc, aoo, boo, avv, bvv
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.ROKS_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_ROKS_SCHEME = Quantity(
        type=str,
        shape=[],
        description='''
        Selects the ROKS scheme when ROKS is applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.ROKS_SCHEME'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SCF_SCF_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        Change the initial guess for the wavefunction.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SCF.SCF_GUESS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_DIAGONALIZATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.DIAGONALIZATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_MIXING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_MIXING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.MIXING'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.OT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_OUTER_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.OUTER_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF_SMEAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF.SMEAR'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XAS(MSection):
    '''
    Sets the method of choice to calculate core-level excitation spectra. The occupied
    states from  which we calculate the excitation should be specified. Localization of
    the orbitals may be useful.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_ADDED_MOS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of additional MOS added spin up only
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.ADDED_MOS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_ATOMS_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the atoms to be excitedThis keyword can be repeated several
        times(useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.ATOMS_LIST'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_DIPOLE_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Type of integral to get the oscillator strengths in the diipole approximation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.DIPOLE_FORM'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_EPS_ADDED = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy incalculation of the added orbitals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.EPS_ADDED'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_MAX_ITER_ADDED = Quantity(
        type=str,
        shape=[],
        description='''
        maximum number of iteration in calculation of added orbitals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.MAX_ITER_ADDED'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method to be used to calculate core-level excitation spectra
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_NGAUSS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of gto's for the expansion of the stoof the type given by STATE_TYPE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.NGAUSS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the excited state if the restart file exists
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.RESTART'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of core-level spectroscopy simulations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_STATE_SEARCH = Quantity(
        type=str,
        shape=[],
        description='''
        # of states where to look for the one to be excited
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.STATE_SEARCH'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_STATE_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of the orbitas that are excited for the xas spectra calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.STATE_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_WFN_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Root of the file names where to read the MOS fromwhich to restart the calculation
        of the core level excited states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.WFN_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_XAS_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Occupation of the core state in XAS calculation by TP_FLEX.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.XAS_CORE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_XAS_TOT_EL = Quantity(
        type=str,
        shape=[],
        description='''
        Total number of electrons for spin channel alpha, in XAS calculation by TP_FLEX.If
        negative value, the number of electrons is set to GS number of electron  minus the
        amount subtracted from the core state
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.XAS_TOT_EL'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_XES_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Occupation of the core state in XES calculation by TP_VAL.The homo is emptied by
        the same amount
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.XES_CORE'))

    x_cp2k_input_FORCE_EVAL_DFT_XAS_XES_EMPTY_HOMO = Quantity(
        type=str,
        shape=[],
        description='''
        Set the occupation of the HOMO in XES calculation by TP_VAL.The HOMO can be
        emptied or not, if the core is still full
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XAS.XES_EMPTY_HOMO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_LOCALIZE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_LOCALIZE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.LOCALIZE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS.SCF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING(MSection):
    '''
    Parameters for self interation corrected hybrid functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING_FUNCTIONAL_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        Which model for the coupling constant integration should be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING.FUNCTIONAL_MODEL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which Hybrid functional should be used. (Has to be consistent with the definitions
        in XC and HF).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING.FUNCTIONAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        The point to be used along the adiabatic curve (0 &#60; λ &#60; 1)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Long-range parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING.OMEGA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.HF_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HF_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.HFX_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.LOAD_BALANCE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.FRACTION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.PW_HFX'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.HF_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.HFX_RI'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.LOAD_BALANCE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.MEMORY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.PERIODIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF.SCREENING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL(MSection):
    '''
    Information on the non local dispersion functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the FFT grid used in the calculation of the nonlocal vdW functional
        [Ry].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL_KERNEL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the kernel data file, may include a path.vdW_kernel_table.dat is for DRSLL
        and LMKLL andrVV10_kernel_table.dat is for rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL.KERNEL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Parameters b and C of the rVV10 functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of functional (the corresponding kernel data file should be selected).Allows
        for common forms such as vdW-DF, vdW-DF2, optB88-vdW, rVV10.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL.TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for non local functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL.VERBOSE_OUTPUT'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD(MSection):
    '''
    Controls the printing of some info about DFTD contributions
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL(MSection):
    '''
    Information on the pair potential to calculate dispersion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOM_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number of a set of atoms for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOM_COORDINATION_NUMBERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_ATOMPARM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies parameters for atom types (in atomic units). If not provided default
        parameters are used (DFT-D2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.ATOMPARM'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_CALCULATE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.CALCULATE_C9_TERM'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,sr6,s8) for the DFT-D3 method, if
        set to zero CP2K attempts to guess the xc functional from REFERENCE_FUNCTIONAL and
        sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_D3BJ_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameters (s6,a1,s8,a2) for the DFT-D3(BJ)
        method, if set to zero CP2K attempts to guess the xc functional from
        REFERENCE_FUNCTIONAL and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.D3BJ_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EPS_CN = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff value for coordination number function (DFT-D3 method)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EPS_CN'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_EXP_PRE = Quantity(
        type=str,
        shape=[],
        description='''
        Prefactor in exponential damping factor (DFT-D2 potential)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.EXP_PRE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_KIND_COORDINATION_NUMBERS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordination number for a kind for the C9 term in DFT-D3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.KIND_COORDINATION_NUMBERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_LONG_RANGE_CORRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate a long range correction to the DFT-D3 model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.LONG_RANGE_CORRECTION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PARAMETER_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the parameter file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PARAMETER_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_R_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Range of potential. The cutoff will be 2 times this value
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.R_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_C9_TERM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate C9 terms in DFT-D3 model using reference coordination numbers
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_C9_TERM'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_REFERENCE_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Use parameters for this specific density functional. For available D3 and D3(BJ)
        parameters see: http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionals.html,
        http://www.thch.uni-bonn.de/tc/downloads/DFT-D3/functionalsbj.html
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.REFERENCE_FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        XC Functional dependent scaling parameter, if set to zero CP2K attempts to guess
        the xc functional that is in use and sets the associated scaling parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_VERBOSE_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Extensive output for the DFT-D2 and DFT-D3 models
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.VERBOSE_OUTPUT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL_PRINT_DFTD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL.PRINT_DFTD'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL(MSection):
    '''
    This section combines all possible additional dispersion corrections to the normal XC
    functionals. This can be more functionals or simple empirical pair potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of dispersion/vdW functional or potential to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_NON_LOCAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.NON_LOCAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL_PAIR_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL.PAIR_POTENTIAL'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CPHF(MSection):
    '''
    Parameters influencing the solution of the Z-vector equations in MP2 gradients
    calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.CPHF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CPHF_EPS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence threshold for the solution of the Z-vector equations. The Z-vector
        equations have the form of a linear system of equations Ax=b, convergence is
        achieved when |Ax-b|<=EPS_CONV.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.CPHF.EPS_CONV'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CPHF_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations allowed for the solution of the Z-vector equations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.CPHF.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_DIRECT_CANONICAL(MSection):
    '''
    Parameters influencing the direct canonical method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_DIRECT_CANONICAL_BIG_SEND = Quantity(
        type=str,
        shape=[],
        description='''
        Send big messages between processes (useful for >48 processors).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.DIRECT_CANONICAL.BIG_SEND'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL(MSection):
    '''
    Parameters the interaction potential in computing the biel integrals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, TShPSC operator).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TRUNCATION_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines truncation radius for the truncated TShPSC potential. Only valid when
        doing truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TRUNCATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL_TSHPSC_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file TShPSC.dat that contains the data for the evaluation of the
        TShPSC G0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.INTERACTION_POTENTIAL.TSHPSC_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO(MSection):
    '''
    Controls the printing basic info about MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS(MSection):
    '''
    Parameters influencing the optimization of the RI MP2 basis. Only exponents of non-
    contracted auxiliary basis can be optimized. An initial RI auxiliary basis has to be
    specified.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_BASIS_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the size of the auxiliary basis set automatically generated as initial
        guess. This will be effective only if RI_AUX_BASIS_SET in the KIND section and
        NUM_FUNC are not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.BASIS_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_I_REL = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the relative deviation of the amplitudes calculated with and
        without RI approximation, (more details in Chem.Phys.Lett.294(1998)143).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_I_REL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_DELTA_RI = Quantity(
        type=str,
        shape=[],
        description='''
        Target accuracy in the absolute difference between the RI-MP2 and the exact MP2
        energy, DRI=ABS(E_MP2-E_RI-MP2).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.DELTA_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_EPS_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The derivatives of the MP2 energy with respect to the exponents of the basis are
        calculated numerically. The change in the exponent a_i employed for the numerical
        evaluation is defined as h_i=EPS_DERIV*a_i.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.EPS_DERIV'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of steps in the RI basis optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS_NUM_FUNC = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of function, for each angular momentum (s, p, d ...),
        employed in the automatically generated initial guess. This will be effective only
        if RI_AUX_BASIS_SET in the KIND section is not specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS.NUM_FUNC'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_LAPLACE(MSection):
    '''
    Parameters influencing the RI-SOS-MP2-Laplace method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_LAPLACE_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-SOS-
        MP2-Laplace method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_LAPLACE.QUADRATURE_POINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_LAPLACE_SIZE_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for the integration in the Laplace method, that is the number of
        processes involved in the computation of each integration point. SIZE_INTEG_GROUP
        has to be a multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1)
        is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_LAPLACE.SIZE_INTEG_GROUP'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2(MSection):
    '''
    Parameters influencing the RI MP2 method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for communication in RI-MP2. Larger BLOCK_SIZE
        reduces communication but requires more memory. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_MP2.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2_EPS_CANONICAL = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for discriminate if a given ij pairs of the unrelaxed MP2 density matrix
        has to be calculated with a canonical reformulation based on the occupied
        eigenvalues differences.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_MP2.EPS_CANONICAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2_FREE_HFX_BUFFER = Quantity(
        type=str,
        shape=[],
        description='''
        Free the buffer containing the 4 center integrals used in the Hartree-Fock
        exchange calculation. This will be effective only for gradients calculations,
        since for the energy only case, the buffers are released by default. (Right now
        debugging only).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_MP2.FREE_HFX_BUFFER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO(MSection):
    '''
    Controls the printing basic info about hf method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI(MSection):
    '''
    All parameters needed in a HFX RI calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_OPTIMIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of iterative RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_OPTIMIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_EPS_SCREENING = Quantity(
        type=str,
        shape=[],
        description='''
        Accuracy of geminal integral evaluation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.EPS_SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iteration in RI fit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI.MAX_ITER'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL(MSection):
    '''
    Sets up interaction potential if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Determines cutoff radius for the truncated 1/r potential. Only valid when doing
        truncated calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for short/longrange interaction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_POTENTIAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which interaction potential should be used (Coulomb, longrange or shortrange).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.POTENTIAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_COULOMB = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a coulomb potential. Only valid when
        doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_COULOMB'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_GAUSSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a gaussian potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_GAUSSIAN'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_SCALE_LONGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Scales Hartree-Fock contribution arising from a longrange potential. Only valid
        when doing a mixed potential calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.SCALE_LONGRANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL_T_C_G_DATA = Quantity(
        type=str,
        shape=[],
        description='''
        Location of the file t_c_g.dat that contains the data for the evaluation of the
        truncated gamma function
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL.T_C_G_DATA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE(MSection):
    '''
    Parameters influencing the load balancing of the HF
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the blocking used for the atomic quartet loops. A proper choice can
        speedup the calculation. The default (-1) is automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.BLOCK_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins per process used to group atom quartets.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.NBINS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE_RANDOMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        This flag controls the randomization of the bin assignment to processes. For
        highly ordered input structures with a bad load balance, setting this flag to TRUE
        might improve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE.RANDOMIZE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY(MSection):
    '''
    Sets up memory parameters for the storage of the ERI's if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_EPS_STORAGE_SCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor to scale eps_schwarz. Storage threshold for compression will be
        EPS_SCHWARZ*EPS_STORAGE_SCALING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.EPS_STORAGE_SCALING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_DISK_SPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of disk space [MB] used to store precomputed compressed
        four-center integrals. If 0, nothing is stored to disk
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_DISK_SPACE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_MAX_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum amount of memory [MB] to be consumed by the full HFX module.
        All temporary buffers and helper arrays are subtracted from this number. What
        remains will be used for storage of integrals. NOTE: This number is assumed to
        represent the memory available to one MPI process. When running a threaded
        version, cp2k automatically takes care of distributing the memory among all the
        threads within a process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.MAX_MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_STORAGE_LOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Loaction where ERI's are stored if MAX_DISK_SPACE /=0 Expects a path to a
        directory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.STORAGE_LOCATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY_TREAT_FORCES_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether the derivative ERI's should be stored to RAM or not. Only
        meaningful when performing Ehrenfest MD. Memory usage is defined via MAX_MEMORY,
        i.e. the memory is shared wit the energy ERI's.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY.TREAT_FORCES_IN_CORE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC(MSection):
    '''
    Sets up periodic boundary condition parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC_NUMBER_OF_SHELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of shells taken into account for periodicity. By default, cp2k tries to
        automatically evaluate this number. This algorithm might be to conservative,
        resulting in some overhead. You can try to adjust this number in order to make a
        calculation cheaper.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC.NUMBER_OF_SHELLS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING(MSection):
    '''
    Sets up screening parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold. This will be approximately the
        accuracy of the forces,  and should normally be similar to EPS_SCF
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ_FORCES'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_EPS_SCHWARZ = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the near field part of the electronic repulsion integrals using the
        Schwarz inequality for the given threshold.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.EPS_SCHWARZ'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_P_SCREEN_CORRECTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Recalculates integrals on the fly if the actual density matrix is larger by a
        given factor than the initial one. If the factor is set to 0.0_dp, this feature is
        disabled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.P_SCREEN_CORRECTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_ON_INITIAL_P = Quantity(
        type=str,
        shape=[],
        description='''
        Screen on an initial density matrix. For the first MD step this matrix must be
        provided by a Restart File.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_ON_INITIAL_P'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING_SCREEN_P_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Screens the electronic repulsion integrals for the forces using the density
        matrix. This results in a significant speedup for large systems, but might require
        a somewhat tigher EPS_SCHWARZ_FORCES.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING.SCREEN_P_FORCES'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF(MSection):
    '''
    Sets up the Hartree-Fock parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        The fraction of Hartree-Fock to add to the total energy. 1.0 implies standard
        Hartree-Fock if used with XC_FUNCTIONAL NONE. NOTE: In a mixed potential
        calculation this should be set to 1.0, otherwise all parts are multiplied with
        this factor.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.FRACTION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Improve the performance of pw_hfx at the cost of some additional memory by storing
        the realspace representation of PW_HFX_BLOCKSIZE states.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX_BLOCKSIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PW_HFX = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Hartree-Fock energy also in the plane wave basis.The value is ignored,
        and intended for debugging only.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.PW_HFX'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_TREAT_LSD_IN_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Determines how spin denisities are taken into account. If true, the beta spin
        density is included via a second in core call. If false, alpha and beta spins are
        done in one shot
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.TREAT_LSD_IN_CORE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HF_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HF_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_HFX_RI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.HFX_RI'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_LOAD_BALANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.LOAD_BALANCE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_MEMORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.MEMORY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.PERIODIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF_SCREENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF.SCREENING'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA(MSection):
    '''
    Parameters influencing the RI RPA method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_MINIMAX_QUADRATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Use the Minimax quadrature scheme for performing the numerical integration.
        Maximum number of quadrature point limited to 20.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.MINIMAX_QUADRATURE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_MM_STYLE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix multiplication style for the Q matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.MM_STYLE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_QUADRATURE_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of quadrature points for the numerical integration in the RI-RPA method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.QUADRATURE_POINTS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_SIZE_FREQ_INTEG_GROUP = Quantity(
        type=str,
        shape=[],
        description='''
        Group size for frequency integration, that is the number of processes involved in
        the computation of each integration point. SIZE_FREQ_INTEG_GROUP has to be a
        multiple of GROUP_SIZE in the WF_CORRELATION section. The default (-1) is
        automatic.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.SIZE_FREQ_INTEG_GROUP'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA.HF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW(MSection):
    '''
    Parameters for the GPW approach in Wavefunction-based Correlation methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff of the finest grid level in the MP2 gpw integration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW.CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW_EPS_FILTER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the DBCSR based multiply (usually 10 times smaller than
        EPS_GRID).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW.EPS_FILTER'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW_EPS_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Determines a threshold for the GPW based integration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW.EPS_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW_PRINT_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        How much output is written by the individual groups.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW.PRINT_LEVEL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the grid at which a Gaussian is mapped.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW.REL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION(MSection):
    '''
    Sets up the Wavefunction-based Correlation parameters if requested
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CALC_COND_NUM = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the condition number of the (P|Q) matrix for the RI methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.CALC_COND_NUM'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_COL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the column block used in the SCALAPACK block cyclic data
        distribution.Default is (COL_BLOCK=-1) is automatic. A proper choice can speedup
        the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.COL_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Group size used in the computation of the integrals. Default is to use all
        processors (GROUP_SIZE=-1).A smaller group size (for example the node size), might
        a better choice if the actual MP2 time is large compared to integral computation
        time. This is usually the case if the total number of processors is not too large.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.GROUP_SIZE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum allowed total memory usage during MP2 methods [Mb].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MEMORY'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Which method should be used to compute the MP2 energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_ROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the row block used in the SCALAPACK block cyclic data distribution.Default
        is (ROW_BLOCK=-1) is automatic. A proper choice can speedup the parallel matrix
        multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.ROW_BLOCK'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_SCALE_S = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the singlet energy component (opposite spin, OS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.SCALE_S'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_SCALE_T = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor of the triplet energy component (same spin, SS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.SCALE_T'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CPHF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_CPHF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.CPHF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_DIRECT_CANONICAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_DIRECT_CANONICAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.DIRECT_CANONICAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_INTERACTION_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.INTERACTION_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_MP2_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.MP2_INFO'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_OPT_RI_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.OPT_RI_BASIS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_LAPLACE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_LAPLACE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_LAPLACE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_MP2'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_MP2'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_RI_RPA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.RI_RPA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION_WFC_GPW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION.WFC_GPW'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC(MSection):
    '''
    Uses the Becke 88 longrange exchange functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR(MSection):
    '''
    Uses the Becke 88 longrange exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        Potential parameter in erf(omega*r)/r
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88(MSection):
    '''
    Uses the Becke 88 exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97(MSection):
    '''
    Uses the Becke 97 exchange correlation functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the B97 and Grimme parametrization
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional, if -1 the default for the given
        parametrization is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL(MSection):
    '''
    Becke Roussel exchange hole model. Can be usedas long range correction with a
    truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff radius for the truncation. If put to zero, the standard full
        range potential will be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter in the exchange hole. Usually this is put to 1.0 or 0.8
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BEEF(MSection):
    '''
    Uses the BEEFvdW exchange functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BEEF_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BEEF.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BEEF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BEEF.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_CS1(MSection):
    '''
    Uses the CS1 functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_CS1_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.CS1.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09(MSection):
    '''
    Combination of three different exchange hole models
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for Becke Roussel hole
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09.GAMMA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_HCTH(MSection):
    '''
    Uses the HCTH class of functionals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_HCTH_PARAMETER_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the parameters should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.HCTH.PARAMETER_SET'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_HCTH_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.HCTH.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_GGA(MSection):
    '''
    Uses one of the KE_GGA functionals (optimized versions of some of these functionals
    might be available outside this section). These functionals are needed for the
    computation of the kinetic energy in the Kim-Gordon method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_GGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the KE_GGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_GGA.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_GGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_GGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC(MSection):
    '''
    To be used for KG runs. Uses kinetic energy functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR(MSection):
    '''
    LDA exchange hole model in truncated coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC(MSection):
    '''
    Uses functionals from LIBXC, see also
    http://www.tddft.org/programs/octopus/wiki/index.php/Libxc
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        names of the functionals, see also
        http://www.tddft.org/programs/octopus/wiki/index.php/Libxc:manual .The precise
        list of available functionals depends on the version of libxc interfaced
        (currently 2.0.1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        parameters of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factors of the functionals
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_ADIABATIC(MSection):
    '''
    Uses the LYP correlation functional in an adiabatic fashion
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_ADIABATIC_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameter of the adiabatic curve.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP_ADIABATIC.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_ADIABATIC_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP_ADIABATIC.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP(MSection):
    '''
    Uses the LYP functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_OPTX(MSection):
    '''
    Uses the OPTX functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_OPTX_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.OPTX.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_OPTX_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.OPTX.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_P86C(MSection):
    '''
    Uses the P86C functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_P86C_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.P86C.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_P86C_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.P86C.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PADE(MSection):
    '''
    Uses the PADE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PADE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PADE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR(MSection):
    '''
    PBE exchange hole model in trucanted coulomb potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_CUTOFF_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines cutoff for lower integration boundary
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.CUTOFF_RADIUS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE(MSection):
    '''
    Uses the PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        switches between the different parametrizations of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92(MSection):
    '''
    Uses the PerdewWang correlation functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PW92.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling of the energy functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PW92.SCALE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PW92.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81(MSection):
    '''
    Uses the PZ functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81_PARAMETRIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of parametrizations should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PZ81.PARAMETRIZATION'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PZ81.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PZ81.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TFW(MSection):
    '''
    Uses the TFW functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TFW_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TFW.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TF(MSection):
    '''
    Uses the TF functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TF.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS(MSection):
    '''
    Uses the TPSS functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TPSS.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TPSS.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TPSS.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN(MSection):
    '''
    Uses the VWN functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN_FUNCTIONAL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which version of the VWN functional should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.VWN.FUNCTIONAL_TYPE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN_SCALE_C = Quantity(
        type=str,
        shape=[],
        description='''
        scales the correlation part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.VWN.SCALE_C'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.VWN.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA(MSection):
    '''
    Uses the XALPHA (SLATER) functional.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XALPHA.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XALPHA.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA_XA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the xa parameter (this does not change the exponent, just the mixing)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XALPHA.XA'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XGGA(MSection):
    '''
    Uses one of the XGGA functionals (optimized versions of some of these functionals
    might be available outside this section).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XGGA_FUNCTIONAL = Quantity(
        type=str,
        shape=[],
        description='''
        Which one of the XGGA functionals should be used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XGGA.FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XGGA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XGGA.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE(MSection):
    '''
    Uses the short range PBE functional
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE_OMEGA = Quantity(
        type=str,
        shape=[],
        description='''
        screening parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE.OMEGA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE_SCALE_X0 = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the original hole PBE-functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE.SCALE_X0'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE_SCALE_X = Quantity(
        type=str,
        shape=[],
        description='''
        scales the exchange part of the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE.SCALE_X'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        activates the functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL(MSection):
    '''
    The xc functional to use
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Shortcut for the most common functional combinations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR_ADIABATIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE88'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE88'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE97'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE97'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BECKE_ROUSSEL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BECKE_ROUSSEL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BEEF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_BEEF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.BEEF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_CS1 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_CS1'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.CS1'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_GV09'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GV09'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_HCTH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_HCTH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.HCTH'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_GGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_GGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_GGA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_KE_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.KE_LIBXC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LDA_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LDA_HOLE_T_C_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LIBXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LIBXC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_ADIABATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP_ADIABATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP_ADIABATIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_LYP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.LYP'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_OPTX = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_OPTX'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.OPTX'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_P86C = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_P86C'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.P86C'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PADE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PADE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PADE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE_HOLE_T_C_LR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE_HOLE_T_C_LR'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PBE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PW92'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PW92'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_PZ81'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.PZ81'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TFW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TFW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TFW'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_TPSS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.TPSS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_VWN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.VWN'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XALPHA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XALPHA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XGGA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XGGA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XGGA'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL_XWPBE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.XWPBE'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_GRID(MSection):
    '''
    The xc parameters used when calculating the xc on the grid
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_GRID_USE_FINER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a finer grid only to calculate the xc
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_GRID.USE_FINER_GRID'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_GRID_XC_DERIV = Quantity(
        type=str,
        shape=[],
        description='''
        The method used to compute the derivatives
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_GRID.XC_DERIV'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_GRID_XC_SMOOTH_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        The density smoothing used for the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_GRID.XC_SMOOTH_RHO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP(MSection):
    '''
    Uses the SAOP potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.SAOP'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the alpha parameter (default = 1.19).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.SAOP.ALPHA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the beta parameter (default = 0.01).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.SAOP.BETA'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP_K_RHO = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the K_rho parameter (default = 0.42).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.SAOP.K_RHO'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL(MSection):
    '''
    The xc potential to use (CAREFUL: xc potential here refers to potentials that are not
    derived from an xc functional, but rather are modelled directly. Therefore there is no
    consistent xc energy available. To still get an energy expression, see ENERGY below
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        How to determine the total energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.ENERGY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL_SAOP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL.SAOP'))


class x_cp2k_section_input_FORCE_EVAL_DFT_XC(MSection):
    '''
    parameters needed calculate the xc potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_DENSITY_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.DENSITY_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_DENSITY_SMOOTH_CUTOFF_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter for the smoothing procedure inxc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.DENSITY_SMOOTH_CUTOFF_RANGE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_FUNCTIONAL_ROUTINE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the code for xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.FUNCTIONAL_ROUTINE'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_GRADIENT_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on the gradient of the density used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.GRADIENT_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_DFT_XC_TAU_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        The cutoff on tau used by the xc calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.XC.TAU_CUTOFF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_ADIABATIC_RESCALING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.ADIABATIC_RESCALING'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_HF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.HF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_VDW_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.VDW_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_WF_CORRELATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.WF_CORRELATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_FUNCTIONAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_FUNCTIONAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_GRID'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC_XC_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC.XC_POTENTIAL'))


class x_cp2k_section_input_FORCE_EVAL_DFT(MSection):
    '''
    parameter needed by dft programs
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT'))

    x_cp2k_input_FORCE_EVAL_DFT_BASIS_SET_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.BASIS_SET_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        The total charge of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.CHARGE'))

    x_cp2k_input_FORCE_EVAL_DFT_EXCITATIONS = Quantity(
        type=str,
        shape=[],
        description='''
        If excitations should be calculated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.EXCITATIONS'))

    x_cp2k_input_FORCE_EVAL_DFT_GEMINAL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the geminal basis set file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.GEMINAL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_MULTIPLICITY = Quantity(
        type=str,
        shape=[],
        description='''
        Two times the total spin plus one. Specify 3 for a triplet, 4 for a quartet, and
        so on. Default is 1 (singlet) for an even number and 2 (doublet) for an odd number
        of electrons.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.MULTIPLICITY'))

    x_cp2k_input_FORCE_EVAL_DFT_PLUS_U_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method employed for the calculation of the DFT+U contribution
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.PLUS_U_METHOD'))

    x_cp2k_input_FORCE_EVAL_DFT_POTENTIAL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the pseudo potential file, may include a path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.POTENTIAL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_DFT_RELAX_MULTIPLICITY = Quantity(
        type=str,
        shape=[],
        description='''
        Do not enforce the occupation of alpha and beta MOs due to the initially defined
        multiplicity, but rather follow an Aufbau principle. A threshold value greater
        than zero activates this option. Larger threshold values increase the probability
        for a spin flip. This option is only valid for unrestricted (i.e. spin polarised)
        Kohn-Sham (UKS) calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.RELAX_MULTIPLICITY'))

    x_cp2k_input_FORCE_EVAL_DFT_ROKS = Quantity(
        type=str,
        shape=[],
        description='''
        Requests a restricted open Kohn-Sham calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.ROKS'))

    x_cp2k_input_FORCE_EVAL_DFT_SUBCELLS = Quantity(
        type=str,
        shape=[],
        description='''
        Read the grid size for subcell generation in the construction of neighbor lists.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SUBCELLS'))

    x_cp2k_input_FORCE_EVAL_DFT_SURF_DIP_DIR = Quantity(
        type=str,
        shape=[],
        description='''
        Cartesian axis parallel to surface normal.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SURF_DIP_DIR'))

    x_cp2k_input_FORCE_EVAL_DFT_SURFACE_DIPOLE_CORRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        For slab calculations with asymmetric geometries, activate the correction of  the
        electrostatic potential with by compensating for the surface dipole. Implemented
        only for slabs with normal  parallel to one Cartesian axis. The normal direction
        is given by the keyword SURF_DIP_DIR
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.SURFACE_DIPOLE_CORRECTION'))

    x_cp2k_input_FORCE_EVAL_DFT_UKS = Quantity(
        type=str,
        shape=[],
        description='''
        Requests a spin-polarized calculation using alpha and beta orbitals, i.e. no spin
        restriction is applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.UKS'))

    x_cp2k_input_FORCE_EVAL_DFT_WFN_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the wavefunction restart file, may include a path. If no file is
        specified, the default is to open the file as generated by the wfn restart print
        key.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.DFT.WFN_RESTART_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_ALMO_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.ALMO_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_AUXILIARY_DENSITY_MATRIX_METHOD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.AUXILIARY_DENSITY_MATRIX_METHOD'))

    x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_DENSITY_FITTING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.DENSITY_FITTING'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EFIELD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EFIELD'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_DENSITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_VXC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_EXTERNAL_VXC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.EXTERNAL_VXC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_KG_METHOD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_KG_METHOD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.KG_METHOD'))

    x_cp2k_section_input_FORCE_EVAL_DFT_KPOINTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_KPOINTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.KPOINTS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LOCALIZE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LOCALIZE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LOCALIZE'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LOW_SPIN_ROKS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LOW_SPIN_ROKS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LOW_SPIN_ROKS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_LS_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.LS_SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_MGRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_MGRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.MGRID'))

    x_cp2k_section_input_FORCE_EVAL_DFT_PERIODIC_EFIELD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_PERIODIC_EFIELD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.PERIODIC_EFIELD'))

    x_cp2k_section_input_FORCE_EVAL_DFT_POISSON = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_POISSON'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.POISSON'))

    x_cp2k_section_input_FORCE_EVAL_DFT_QS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_QS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.QS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_REAL_TIME_PROPAGATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.REAL_TIME_PROPAGATION'))

    x_cp2k_section_input_FORCE_EVAL_DFT_RELATIVISTIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_RELATIVISTIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.RELATIVISTIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCCS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCCS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCCS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SCRF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SCRF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SCRF'))

    x_cp2k_section_input_FORCE_EVAL_DFT_SIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_SIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.SIC'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TDDFPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TDDFPT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_TRANSPORT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_TRANSPORT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.TRANSPORT'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XAS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XAS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XAS'))

    x_cp2k_section_input_FORCE_EVAL_DFT_XC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT_XC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT.XC'))


class x_cp2k_section_input_FORCE_EVAL_EIP(MSection):
    '''
    This section contains all information to run an Empirical Interatomic Potential (EIP)
    calculation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EIP'))

    x_cp2k_input_FORCE_EVAL_EIP_EIP_MODEL = Quantity(
        type=str,
        shape=[],
        description='''
        Selects the empirical interaction potential model
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EIP.EIP_MODEL'))


class x_cp2k_section_input_FORCE_EVAL_EP(MSection):
    '''
    parameter needed by an ep calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EP'))

    x_cp2k_input_FORCE_EVAL_EP_AT_PER_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        Number of atoms in each molecule (at the moment only uniform system cam be
        handled)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.AT_PER_MOL'))

    x_cp2k_input_FORCE_EVAL_EP_COMP_INPUT = Quantity(
        type=str,
        shape=[],
        description='''
        Path to the input to be used for the component of the main system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.COMP_INPUT'))

    x_cp2k_input_FORCE_EVAL_EP_E0_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        If only e0 should be calculated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.E0_ONLY'))

    x_cp2k_input_FORCE_EVAL_EP_EPS_LIN_SOLV = Quantity(
        type=str,
        shape=[],
        description='''
        Requested convergence of the linear solver (for psi1)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.EPS_LIN_SOLV'))

    x_cp2k_input_FORCE_EVAL_EP_ROTATE = Quantity(
        type=str,
        shape=[],
        description='''
        If rotations from a unique set of coefficients should be used or if single
        molecule optimizations generate it
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.ROTATE'))

    x_cp2k_input_FORCE_EVAL_EP_START_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Starting coefficients for roatation based ep
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EP.START_COEFFS'))


class x_cp2k_section_input_FORCE_EVAL_EXTERNAL_POTENTIAL(MSection):
    '''
    Section controlling the presence of an external potential dependent  on the atomic
    positions (X,Y,Z)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EXTERNAL_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_ATOMS_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the atoms on which the external potential will act
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.ATOMS_LIST'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.DX'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation. Variables must be the
        atomic coordinates (X,Y,Z).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.UNITS'))

    x_cp2k_input_FORCE_EVAL_EXTERNAL_POTENTIAL_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of  parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.EXTERNAL_POTENTIAL.VALUES'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_COUPLING(MSection):
    '''
    Coupling between two force_eval: E=(E1+E2 - sqrt((E1-E2)**2+4*H12**2))/2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.COUPLING'))

    x_cp2k_input_FORCE_EVAL_MIXED_COUPLING_COUPLING_PARAMETER = Quantity(
        type=str,
        shape=[],
        description='''
        Coupling parameter H12 used in the coupling
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.COUPLING.COUPLING_PARAMETER'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_GENERIC(MSection):
    '''
    User driven coupling between two or more force_eval.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.GENERIC'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.DX'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_MIXING_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the mixing functional form in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.MIXING_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.UNITS'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.VALUES'))

    x_cp2k_input_FORCE_EVAL_MIXED_GENERIC_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variables of the functional form. To allow an efficient mapping the
        order of the energy variables will be considered identical to the order of the
        force_eval in the force_eval_order list.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GENERIC.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_LINEAR(MSection):
    '''
    Linear combination between two force_eval:  F= lambda F1 + (1-lambda) F2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.LINEAR'))

    x_cp2k_input_FORCE_EVAL_MIXED_LINEAR_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the mixing parameter lambda in the formula:
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.LINEAR.LAMBDA'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT(MSection):
    '''
    Fragment definition
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.FRAGMENT'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Starting and ending atomic index defining one fragment must be provided
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.FRAGMENT.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT_MAP = Quantity(
        type=str,
        shape=[],
        description='''
        Provides the index of the fragment of the MIXED force_eval mapped on the locally
        defined fragment.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.FRAGMENT.MAP'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the index of the fragment defined
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.FRAGMENT.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED_FRAGMENT(MSection):
    '''
    Fragment definition
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED.FRAGMENT'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED_FRAGMENT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Starting and ending atomic index defining one fragment must be provided
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED.FRAGMENT.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED_FRAGMENT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the index of the fragment defined
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED.FRAGMENT.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED(MSection):
    '''
    Defines the fragments for the mixed force_eval (reference)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED_FRAGMENT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED_FRAGMENT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED.FRAGMENT'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL(MSection):
    '''
    Defines the fragments and the mapping for each force_eval (an integer index (ID) needs
    to be provided as parameter)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_DEFINE_FRAGMENTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the fragments definition of the force_eval through the fragments of the
        force_eval_mixed. This avoids the pedantic definition of the fragments for the
        force_eval, assuming the order of the fragments for the specified force_eval is
        the same as the sequence  of integers provided. Easier to USE should be preferred
        to the specification of the single fragments.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.DEFINE_FRAGMENTS'))

    x_cp2k_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the index of the force_eval for which fragments and mappings are provided
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_FRAGMENT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL.FRAGMENT'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING(MSection):
    '''
    Defines the mapping of atoms for the different force_eval with the mixed force_eval.
    The default is to have a mapping 1-1 between atom index (i.e. all force_eval share the
    same geometrical structure). The mapping is based on defining fragments and the
    mapping the  fragments between the several force_eval and the mixed force_eval
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL_MIXED'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING_FORCE_EVAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING.FORCE_EVAL'))


class x_cp2k_section_input_FORCE_EVAL_MIXED_RESTRAINT(MSection):
    '''
    Restraint between two force_eval: E = E1 + k*(E1-E2-t)**2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_MIXED_RESTRAINT_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Strength of the restraint (k) in k*(E1-E2-t)**2
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.RESTRAINT.RESTRAINT_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_MIXED_RESTRAINT_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target value of the restraint (t)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.RESTRAINT.RESTRAINT_TARGET'))


class x_cp2k_section_input_FORCE_EVAL_MIXED(MSection):
    '''
    This section contains all information to run with a hamiltonian defined by a mixing of
    force_evals
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED'))

    x_cp2k_input_FORCE_EVAL_MIXED_GROUP_PARTITION = Quantity(
        type=str,
        shape=[],
        description='''
        gives the exact number of processors for each group. If not specified processors
        allocated will be equally distributed for the specified subforce_eval, trying to
        build a number of groups equal to the number of subforce_eval specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.GROUP_PARTITION'))

    x_cp2k_input_FORCE_EVAL_MIXED_MIXING_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        The type of mixing to be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.MIXING_TYPE'))

    x_cp2k_input_FORCE_EVAL_MIXED_NGROUPS = Quantity(
        type=str,
        shape=[],
        description='''
        Gives the wanted number of groups. If not specified the number of groups is set to
        the number of subforce_eval defined.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MIXED.NGROUPS'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_COUPLING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_COUPLING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.COUPLING'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_GENERIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_GENERIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.GENERIC'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_LINEAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_LINEAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.LINEAR'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_MAPPING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.MAPPING'))

    x_cp2k_section_input_FORCE_EVAL_MIXED_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED.RESTRAINT'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB(MSection):
    '''
    Specifies the Urey-Bradley potential between the external atoms defining the angle
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB_CS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cubic stretch term.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB.CS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of Urey-Bradleypotential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential. For MORSE potentials 2 numbers are
        expected. For QUARTIC potentials 3 numbers are expected.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the equilibrium distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB.R0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND(MSection):
    '''
    Specifies the bend potential of the MM system.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BEND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the bend.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_CB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the cubic force constant of the bend
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.CB'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_KBS12 = Quantity(
        type=str,
        shape=[],
        description='''
        Mixed bend stretch parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.KBS12'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_KBS32 = Quantity(
        type=str,
        shape=[],
        description='''
        Mixed bend stretch parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.KBS32'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of bend potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_KSS = Quantity(
        type=str,
        shape=[],
        description='''
        Mixed bend stretch parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.KSS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_R012 = Quantity(
        type=str,
        shape=[],
        description='''
        Mixed bend stretch parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.R012'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_R032 = Quantity(
        type=str,
        shape=[],
        description='''
        Mixed bend stretch parameter
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.R032'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BEND_THETA0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the equilibrium angle.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BEND.THETA0'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND_UB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BEND.UB'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BOND(MSection):
    '''
    Specifies the bond potential
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BOND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BOND_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BOND.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BOND_CS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cubic stretch term.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BOND.CS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BOND_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of Bondpotential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BOND.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BOND_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential. For MORSE potentials 2 numbers are
        expected. For QUARTIC potentials 3 numbers are expected.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BOND.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_BOND_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the equilibrium distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.BOND.R0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGES(MSection):
    '''
    Allow to specify an array of classical charges, thus avoiding the packing and
    permitting the usage of different charges for same atomic types.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.CHARGES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_CHARGES_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the charge for the individual atom. Order MUST reflect the one specified
        for the geometry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.CHARGES.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGE(MSection):
    '''
    This section specifies the charge of the MM atoms
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.CHARGE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_CHARGE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind of the charge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.CHARGE.ATOM'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the charge of the MM atom in electron charge unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.CHARGE.CHARGE'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING(MSection):
    '''
    This section specifies optional electric field damping for the polarizable atoms.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind for this damping function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING.ATOM'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING_BIJ = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the BIJ parameter for this damping.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING.BIJ'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING_CIJ = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the CIJ parameter for this damping.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING.CIJ'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the order for this damping.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING.ORDER'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the damping type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING.TYPE'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE(MSection):
    '''
    This section specifies that we will perform an SCF dipole calculation of the MM atoms.
    Needs KEYWORD POL_SCF in POISSON secton
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_APOL = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the isotropic polarizability of the MM atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.APOL'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind of the scf dipole.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.ATOM'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE_DAMPING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE.DAMPING'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER(MSection):
    '''
    Specifies the improper torsion potential of the MM system.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the improper tors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of improper torsion potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER_PHI0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the phase of the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER.PHI0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD(MSection):
    '''
    This section specifies the input parameters for BMHFTD potential type.Functional form:
    V(r) = A*exp(-B*r) - f_6*(r)C/r^6 - f_8(r)*D/r^8.where f_order(r)=1-exp(-BD * r) *
    \\sum_{k=0}^order (BD * r)^k / k! .(Tang-Toennies damping function)No values available
    inside cp2k.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the BMHFTD nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the dispersion-damped Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_BD = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the BD parameter of the dispersion-damped Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.BD'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the dispersion-damped Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the dispersion-damped Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the dispersion-damped Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_MAP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the kinds for which internally is defined the BMHFTD nonbond potential at
        the moment no species included.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.MAP_ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the order for this damping.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.ORDER'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the BMHFTD potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT(MSection):
    '''
    This section specifies the input parameters for BMHFT potential type.Functional form:
    V(r) = A * EXP(-B*r) - C/r^6 - D/r^8.Values available inside cp2k only for the Na/Cl
    pair.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the BMHFT nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the Fumi-Tosi Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_MAP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the kinds for which internally is defined the BMHFT nonbond potential at
        the moment only Na and Cl.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.MAP_ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the BMHFT potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES(MSection):
    '''
    This section specifies the input parameters for the Buckingham 4-ranges potential
    type. Functional form:<ul><li>V(r) = A*EXP(-B*r) for r &#60;
    r<sub>1</sub></li><li>V(r) = Sum_n POLY1(n)*r<sup>n</sup> for r<sub>1</sub> ≤ r &#60;
    r<sub>2</sub></li><li>V(r) = Sum_n POLY2(n)*r<sup>n</sup> for r<sub>2</sub> ≤ r &#60;
    r<sub>3</sub></li><li>V(r) = -C/r<sup>6</sup> for r ≥ r<sub>3</sub></li></ul>
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Buckingham potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Buckingham potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Buckingham  potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_POLY1 = Quantity(
        type=str,
        shape=[],
        description='''
        Coefficients of the polynomial used in the second rangeThis keyword can be
        repeated several times.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.POLY1'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_POLY2 = Quantity(
        type=str,
        shape=[],
        description='''
        Coefficients of the polynomial used in the third rangeThis keyword can be repeated
        several times.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.POLY2'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_R1 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the first range
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.R1'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_R2 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the second range
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.R2'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_R3 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the third range
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.R3'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Buckingham potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE(MSection):
    '''
    This section specifies the input parameters for Buckingham plus Morse potential type
    Functional Form: V(r) =
    F0*(B1+B2)*EXP([A1+A2-r]/[B1+B2])-C/r^6+D*{EXP[-2*beta*(r-R0)]-2*EXP[-beta*(r-R0)]}.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_A1 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A1 parameter of Buckingham+Morse potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.A1'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_A2 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A2 parameter of Buckingham+Morse potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.A2'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_B1 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B1 parameter of Buckingham+Morse potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.B1'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_B2 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B2 parameter of Buckingham+Morse potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.B2'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the width for the Morse part
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.BETA'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of Buckingham+Morse  potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the amplitude for the Morse part
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_F0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the f0 parameter of Buckingham+Morse potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.F0'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the equilibrium distance for the Morse part
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.R0'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Buckingham potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_EAM(MSection):
    '''
    This section specifies the input parameters for EAM potential type.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.EAM'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_EAM_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.EAM.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_EAM_PARM_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains the tabulated EAM potential. File structure:
        the first line of the potential file contains a title. The second line contains:
        atomic number, mass and lattice constant. These information are parsed but not
        used in CP2K. The third line contains: dr: increment of r for the tabulated values
        of density and phi (assuming r starts in 0) [angstrom]; drho: increment of density
        for the tabulated values of the embedding function (assuming rho starts in 0)
        [au_c]; cutoff: cutoff of the EAM potential; npoints: number of points in
        tabulated. Follow in order npoints lines for rho [au_c] and its derivative
        [au_c*angstrom^-1]; npoints lines for PHI [ev] and its derivative [ev*angstrom^-1]
        and npoint lines for the embedded function [ev] and its derivative [ev*au_c^-1].
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.EAM.PARM_FILE_NAME'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT(MSection):
    '''
    This section specifies the input parameters for a generic potential type.A functional
    form is specified. Mathematical Operators recognized are +, -, *, /, ** or
    alternatively ^, whereas symbols for brackets must be (). The function parser
    recognizes the (single argument) Fortran 90 intrinsic functions abs, exp, log10, log,
    sqrt, sinh, cosh, tanh, sin, cos, tan, asin, acos, atan. Parsing for INTRINSIC
    functions is CASE INsensitive.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.UNITS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.VALUES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variable of the functional form.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN(MSection):
    '''
    This section specifies the input parameters for GOODWIN potential type.Functional
    form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_DC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the DC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.DC'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_MC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the MC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.MC'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_M = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the M parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.M'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN_VR0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the VR0 parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN.VR0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV(MSection):
    '''
    This section specifies the input parameters for IPBV potential type.Functional form:
    Implicit table function.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the IPBV nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the IPBV potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES(MSection):
    '''
    This section specifies the input parameters for LENNARD-JONES potential
    type.Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the EPSILON parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.EPSILON'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the SIGMA parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES.SIGMA'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP(MSection):
    '''
    This section specifies the input parameters for QUIP potential type. Mainly intended
    for things like GAP corrections to DFT to achieve correlated-wavefunction-like
    accuracy. Requires linking with quip library from <a href="http://www.libatoms.org"
    target="_blank">http://www.libatoms.org</a> .
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the QUIP potential. For more than 2 elements,
        &QUIP section must be repeated until each element has been mentioned at least
        once. Set IGNORE_MISSING_CRITICAL_PARAMS to T in enclosing &FORCEFIELD section to
        avoid having to list every pair of elements separately.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP_CALC_ARGS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the potential calculation arguments for the QUIP potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP.CALC_ARGS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP_INIT_ARGS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the potential initialization arguments for the QUIP potential. If blank
        (default) first potential defined in QUIP parameter file will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP.INIT_ARGS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP_PARM_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains the QUIP potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP.PARM_FILE_NAME'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN(MSection):
    '''
    This section specifies the input parameters for the Siepmann-Sprik potential type.
    Consist of 4 terms: T1+T2+T3+T4. The terms T1=A/rij^alpha and T2=-C/rij^6 have to be
    given via the GENPOT section. The terms T3+T4 are obtained from the SIEPMANN section.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the beta parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.BETA'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_E = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the E parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.E'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_F = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the F parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.F'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of Siepmann potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN.RCUT'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF(MSection):
    '''
    This section specifies the input parameters for Tersoff potential type.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the alpha parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.ALPHA'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the beta parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.BETA'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_BIGD = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.BIGD'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_BIGR = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the bigR parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.BIGR'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the c parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the d parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_H = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the h parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.H'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_LAMBDA1 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lambda1 parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.LAMBDA1'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_LAMBDA2 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lambda2 parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.LAMBDA2'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_LAMBDA3 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lambda3 parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.LAMBDA3'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_N = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the n parameter of Tersoff potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.N'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the tersoff potential.  This parameter is in
        principle already defined by the values of  bigD and bigR. But it is necessary to
        define it when using the tersoff  in conjuction with other potentials (for the
        same atomic pair) in order to have the same consistent definition of RCUT for all
        potentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF.RCUT'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS(MSection):
    '''
    This section specifies the input parameters for WILLIAMS potential type.Functional
    form: V(r) = A*EXP(-B*r) - C / r^6 .
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT(MSection):
    '''
    This section specifies the input parameters for a generic potential type.A functional
    form is specified. Mathematical Operators recognized are +, -, *, /, ** or
    alternatively ^, whereas symbols for brackets must be (). The function parser
    recognizes the (single argument) Fortran 90 intrinsic functions abs, exp, log10, log,
    sqrt, sinh, cosh, tanh, sin, cos, tan, asin, acos, atan. Parsing for INTRINSIC
    functions is CASE INsensitive.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.UNITS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.VALUES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variable of the functional form.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN(MSection):
    '''
    This section specifies the input parameters for GOODWIN potential type.Functional
    form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_DC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the DC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.DC'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.D'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_MC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the MC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.MC'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_M = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the M parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.M'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN_VR0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the VR0 parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN.VR0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES(MSection):
    '''
    This section specifies the input parameters for LENNARD-JONES potential
    type.Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the EPSILON parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.EPSILON'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RMIN'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the SIGMA parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES.SIGMA'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS(MSection):
    '''
    This section specifies the input parameters for WILLIAMS potential type.Functional
    form: V(r) = A*EXP(-B*r) - C / r^6 .
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.A'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.B'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.C'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.RCUT'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.RMAX'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14(MSection):
    '''
    This section specifies the input parameters for 1-4 NON-BONDED interactions.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GENPOT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GENPOT'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_GOODWIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.GOODWIN'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_LENNARD_JONES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.LENNARD-JONES'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14_WILLIAMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14.WILLIAMS'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED(MSection):
    '''
    This section specifies the input parameters for NON-BONDED interactions.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFTD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFTD'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BMHFT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BMHFT'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCK4RANGES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCK4RANGES'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_BUCKMORSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.BUCKMORSE'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_EAM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_EAM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.EAM'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GENPOT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GENPOT'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_GOODWIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.GOODWIN'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_IPBV'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.IPBV'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_LENNARD_JONES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.LENNARD-JONES'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_QUIP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.QUIP'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_SIEPMANN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.SIEPMANN'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_TERSOFF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.TERSOFF'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED_WILLIAMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED.WILLIAMS'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND(MSection):
    '''
    Specifies the out of plane bend potential of the MM system.(Only defined for atom
    quadruples which are also defined as an improper pattern in the topology.)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the opbend.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of out of plane bend potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND_PHI0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the phase of the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND.PHI0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_QUADRUPOLE(MSection):
    '''
    This section specifies that we will perform an SCF quadrupole calculation of the MM
    atoms. Needs KEYWORD POL_SCF in POISSON secton
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.QUADRUPOLE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_QUADRUPOLE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind of the scf quadrupole.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.QUADRUPOLE.ATOM'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_QUADRUPOLE_CPOL = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the isotropic polarizability of the MM atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.QUADRUPOLE.CPOL'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SHELL(MSection):
    '''
    This section specifies the parameters for shell-model potentials
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.SHELL'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_CORE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Partial charge assigned to the core (electron charge units)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.CORE_CHARGE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_K2_SPRING = Quantity(
        type=str,
        shape=[],
        description='''
        Force constant k2 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 binding a core-
        shell pair when a core-shell potential is employed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.K2_SPRING'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_K4_SPRING = Quantity(
        type=str,
        shape=[],
        description='''
        Force constant k4 of the spring potential 1/2*k2*r^2 + 1/24*k4*r^4 binding a core-
        shell pair when a core-shell potential is employed. By default a harmonic spring
        potential is used, i.e. k4 is zero.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.K4_SPRING'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_MASS_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        Fraction of the mass of the atom to be assigned to the shell
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.MASS_FRACTION'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_MAX_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Assign a maximum elongation of the spring, if negative no limit is imposed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.MAX_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The kind for which the shell potential parameters are given
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_SHELL_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Partial charge assigned to the shell (electron charge units)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.SHELL_CHARGE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHELL_SHELL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Define a screening function to exclude some neighbors  of the shell when
        electrostatic interaction are considered, if negative no screening is operated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHELL.SHELL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE(MSection):
    '''
    specifies parameters to set up the splines used in the nonboned interactions (both
    pair body potential and many body potential)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_EMAX_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum value of energy used to check the accuracy requested through
        EPS_SPLINE. Energy values larger than EMAX_ACCURACY generally do not  satisfy the
        requested accuracy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.EMAX_ACCURACY'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_EMAX_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum value of the potential up to which splines will be constructed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.EMAX_SPLINE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_EPS_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the threshold for the choice of the number of points used in the splines
        (comparing the splined value with the  analytically evaluated one)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.EPS_SPLINE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_NPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Override the default search for an accurate spline by specifying a fixed number of
        spline points.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.NPOINTS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_R0_NB = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the minimum value of the distance interval  that brackets the value of
        emax_spline.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.R0_NB'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_RCUT_NB = Quantity(
        type=str,
        shape=[],
        description='''
        Cutoff radius for nonbonded interactions. This value overrides  the value
        specified in the potential definition and is global for all potentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.RCUT_NB'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE_UNIQUE_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        For few potentials (Lennard-Jones) one global optimal spline is generated instead
        of different optimal splines for each kind of potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE.UNIQUE_SPLINE'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_TORSION(MSection):
    '''
    Specifies the torsion potential of the MM system.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.TORSION'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the tors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.TORSION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_TORSION_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of torsion potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.TORSION.KIND'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_TORSION_K = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the force constant of the potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.TORSION.K'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_TORSION_M = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the multiplicity of the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.TORSION.M'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_TORSION_PHI0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the phase of the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.TORSION.PHI0'))


class x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD(MSection):
    '''
    Section specifying information regarding how to set up properly a force_field for the
    classical calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_DO_NONBONDED = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the computation of all the real-sapce (short-range) nonbonded
        interactions. This also includes the real-space corrections for excluded or scaled
        1-2, 1-3 and 1-4 interactions. When set to F, the neighborlists are not created
        and all interactions that depend on them are not computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.DO_NONBONDED'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_EI_SCALE14 = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor for the electrostatics 1-4
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.EI_SCALE14'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_IGNORE_MISSING_CRITICAL_PARAMS = Quantity(
        type=str,
        shape=[],
        description='''
        Do not abort when critical force-field parameters are missing. CP2K will run as if
        the terms containing the missing parameters are zero.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.IGNORE_MISSING_CRITICAL_PARAMS'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_MULTIPLE_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        Enables the possibility to define NONBONDED and NONBONDED14 as a sum of different
        kinds of potential. Useful for piecewise defined potentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.MULTIPLE_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_PARM_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains the parameters of the FF.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.PARM_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_PARMTYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the kind of torsion potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.PARMTYPE'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_SHIFT_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Add a constant energy shift to the real-space non-bonding interactions (both Van
        der Waals and electrostatic) such that the energy at the cutoff radius is zero.
        This makes the non-bonding interactions continuous at the cutoff.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.SHIFT_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_VDW_SCALE14 = Quantity(
        type=str,
        shape=[],
        description='''
        Scaling factor for the VDW 1-4
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.VDW_SCALE14'))

    x_cp2k_input_FORCE_EVAL_MM_FORCEFIELD_ZBL_SCATTERING = Quantity(
        type=str,
        shape=[],
        description='''
        A short range repulsive potential is added, to simulate collisions and scattering.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.FORCEFIELD.ZBL_SCATTERING'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BEND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BEND'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BOND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_BOND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.BOND'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.CHARGES'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_DIPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.DIPOLE'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_IMPROPER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.IMPROPER'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED14'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED14'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_NONBONDED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.NONBONDED'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_OPBEND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.OPBEND'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_QUADRUPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_QUADRUPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.QUADRUPOLE'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SHELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SHELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.SHELL'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD.TORSION'))


class x_cp2k_section_input_FORCE_EVAL_MM_NEIGHBOR_LISTS(MSection):
    '''
    This section specifies the input parameters for the construction of neighbor lists.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.NEIGHBOR_LISTS'))

    x_cp2k_input_FORCE_EVAL_MM_NEIGHBOR_LISTS_GEO_CHECK = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the check that two atoms are never below the minimum value
        used to construct the splines during the construction of the neighbouring list.
        Disabling this keyword avoids CP2K to abort in case two atoms are below the
        minimum  value of the radius used to generate the splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.NEIGHBOR_LISTS.GEO_CHECK'))

    x_cp2k_input_FORCE_EVAL_MM_NEIGHBOR_LISTS_NEIGHBOR_LISTS_FROM_SCRATCH = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the building of the neighbouring list from scratch.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.NEIGHBOR_LISTS.NEIGHBOR_LISTS_FROM_SCRATCH'))

    x_cp2k_input_FORCE_EVAL_MM_NEIGHBOR_LISTS_VERLET_SKIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the Verlet Skin for the generation of the neighbor lists
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.NEIGHBOR_LISTS.VERLET_SKIN'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES(MSection):
    '''
    Enables the use of multipoles in the treatment of the electrostatics.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES_EPS_POL = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the rmsd threshold for the derivatives of the energy towards the Cartesian
        dipoles components
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES.EPS_POL'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES_MAX_IPOL_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of iterations for induced dipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES.MAX_IPOL_ITER'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES_MAX_MULTIPOLE_EXPANSION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum level of multipoles expansion used  for the electrostatics.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES.MAX_MULTIPOLE_EXPANSION'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES_POL_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the method to obtain self consistent induced multipole moments.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES.POL_SCF'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the Multipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID(MSection):
    '''
    Set options that influence how the realspace grids are being distributed in parallel
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_DISTRIBUTION_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of slices in the x, y and z directions.-1 specifies that any
        number of slices is OK.If a given distribution can not be satisfied, a replicated
        grid will result.Also see LOCK_DISTRIBUTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.DISTRIBUTION_LAYOUT'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_DISTRIBUTION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Parallelization strategy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.DISTRIBUTION_TYPE'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_HALO_REDUCTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to reduce the halo of the distributed grid (experimental features).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.HALO_REDUCTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_LOCK_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, only basic QS deals correctly with a non-default value.If the
        distribution is locked, a grid will have the same distribution asthe next finer
        multigrid (provided it is distributed).If unlocked, all grids can be distributed
        freely.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.LOCK_DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_MAX_DISTRIBUTED_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        If the multigrid-level of a grid is larger than the parameter, it will not be
        distributed in the automatic scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.MAX_DISTRIBUTED_LEVEL'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID_MEMORY_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A grid will only be distributed if the memory usage for that grid (including halo)
        is smaller than a replicated grid by this parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID.MEMORY_FACTOR'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD(MSection):
    '''
    Ewald parameters controlling electrostatic only for CLASSICAL MM.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        alpha parameter associated with Ewald (EWALD|PME|SPME). Recommended for small
        systems is is alpha = 3.5 / r_cut. Tuning alpha, r_cut and gmax is needed to
        obtain O(N**1.5) scaling for ewald.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.ALPHA'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        tolerance of gaussians for fft interpolation (PME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.EPSILON'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_EWALD_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Expected accuracy in the Ewald sum. This number affects only the calculation of
        the cutoff for the real-space term of the ewald summation (EWALD|PME|SPME) as well
        as the construction of the neighbor lists (if the cutoff for non-bonded terms is
        smaller than the value employed to compute the EWALD real-space term). This
        keyword has no effect on the reciprocal space term (which can be tuned
        independently).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.EWALD_ACCURACY'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_EWALD_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        The type of ewald you want to perform.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.EWALD_TYPE'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_GMAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points (SPME and EWALD). If a single number is specified,the same
        number of points is used for all three directions on the grid.If three numbers are
        given, each direction can have a different number of points.The number of points
        needs to be FFTable (which depends on the library used) and odd for EWALD.The
        optimal number depends e.g. on alpha and the size of the cell. 1 point per
        Angstrom is common.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.GMAX'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_NS_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points on small mesh (PME only), should be odd.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.NS_MAX'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_O_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        order of the beta-Euler spline (SPME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.O_SPLINE'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_EWALD_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Explicitly provide the real-space cutoff of the ewald summation (EWALD|PME|SPME).
        If present, overwrites the estimate of EWALD_ACCURACY and may affect the
        construction of the neighbor lists for non-bonded terms (in FIST), if the value
        specified is larger than the cutoff for non-bonded interactions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.EWALD.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_MULTIPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD_RS_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD.RS_GRID'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MT(MSection):
    '''
    Sets up parameters of  Martyna-Tuckerman poisson solver. Note that exact results are
    only guaranteed if the unit cell is twice as large as charge density (and serious
    artefacts can result if the cell is much smaller).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MT'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MT_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence parameter ALPHA*RMIN. Default value 7.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MT.ALPHA'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MT_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the multiplicative factor for the CUTOFF keyword in MULTI_GRID  section.
        The result gives the cutoff at which the 1/r non-periodic FFT3D is
        evaluated.Default is 2.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MT.REL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE(MSection):
    '''
    Controls the checking of the G-space term Spline Interpolation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR(MSection):
    '''
    controls the interpolation for the G-space term
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.PRECOND'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information during the run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE(MSection):
    '''
    This section is used to set up the decoupling of QM periodic images with the use of
    density derived atomic point charges.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_ANALYTICAL_GTERM = Quantity(
        type=str,
        shape=[],
        description='''
        Evaluates the Gterm in the Ewald Scheme analytically instead of using Splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.ANALYTICAL_GTERM'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_EWALD_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Precision achieved in the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.EWALD_PRECISION'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of grid points used for the Interpolation of the G-space term
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Real space cutoff for the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_CHECK_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON_WAVELET(MSection):
    '''
    Sets up parameters of  wavelet based poisson solver.This solver allows for non-
    periodic (PERIODIC NONE) boundary conditions and slab-boundary conditions (but only
    PERIODIC XZ).It does not require very large unit cells, only that the density goes to
    zero on the faces of the cell.The use of PREFERRED_FFT_LIBRARY FFTSG is required
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.WAVELET'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_WAVELET_SCF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of scaling function used in the wavelet approach, the total energy depends on
        this choice,and the convergence with respect to cutoff depends on the selected
        scaling functions.Possible values are 8,14,16,20,24,30,40,50,60,100
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.WAVELET.SCF_TYPE'))


class x_cp2k_section_input_FORCE_EVAL_MM_POISSON(MSection):
    '''
    Sets up the poisson resolutor.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions on wich apply PBC. Important notice,  this only applies to
        the electrostatics. See the CELL section to specify the periodicity used for e.g.
        the pair lists. Typically the settings should be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_MM_POISSON_POISSON_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of solver to use to solve the Poisson equation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.MM.POISSON.POISSON_SOLVER'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_EWALD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.EWALD'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MT'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_MULTIPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.MULTIPOLE'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON_WAVELET = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON_WAVELET'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON.WAVELET'))


class x_cp2k_section_input_FORCE_EVAL_MM(MSection):
    '''
    This section contains all information to run a MM calculation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM'))

    x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_FORCEFIELD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.FORCEFIELD'))

    x_cp2k_section_input_FORCE_EVAL_MM_NEIGHBOR_LISTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_NEIGHBOR_LISTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.NEIGHBOR_LISTS'))

    x_cp2k_section_input_FORCE_EVAL_MM_POISSON = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM_POISSON'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM.POISSON'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D(MSection):
    '''
    Each node prints out its distribution info ...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION1D'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION1D.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D(MSection):
    '''
    Controls the printing of the distribution of matrix blocks,...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION2D'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION2D.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION(MSection):
    '''
    Controls the printing of the distribution of molecules, atoms, ...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_DISTRIBUTION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.DISTRIBUTION.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.FORCES.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES(MSection):
    '''
    Controls the printing of the forces after each force evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.FORCES'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_NDIGITS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of digits used for the printing of the forces
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.NDIGITS'))

    x_cp2k_input_FORCE_EVAL_PRINT_FORCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.FORCES.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.FORCES.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION(MSection):
    '''
    Controls the printing of information regarding the PW and RS grid structures.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.GRID_INFORMATION'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_GRID_INFORMATION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.GRID_INFORMATION.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.GRID_INFORMATION.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information generated by force_eval
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR(MSection):
    '''
    Controls the printing of the stress tensor
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.STRESS_TENSOR'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_NDIGITS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of digits used for the printing of the stress tensor
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.NDIGITS'))

    x_cp2k_input_FORCE_EVAL_PRINT_STRESS_TENSOR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.STRESS_TENSOR.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.STRESS_TENSOR.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.BAND'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.BSSE'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.CELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.GEO_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.JUST_ENERGY'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.MD'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.METADYNAMICS'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.POWELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.QS_SCF'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.REPLICA_EVAL'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.ROT_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.SHELL_OPT'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH.XAS_SCF'))


class x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS(MSection):
    '''
    Controls the printing of the total number of atoms, kinds,...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS.EACH'))


class x_cp2k_section_input_FORCE_EVAL_PRINT(MSection):
    '''
    Properties that you want to output and that are common to all methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION1D'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION1D'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION2D'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION2D'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_DISTRIBUTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.DISTRIBUTION'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.FORCES'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_GRID_INFORMATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.GRID_INFORMATION'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_STRESS_TENSOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.STRESS_TENSOR'))

    x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT_TOTAL_NUMBERS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT.TOTAL_NUMBERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ATOMIC(MSection):
    '''
    Controls the calculation of atomic properties. Printing is controled by FORCE_EVAL /
    PRINT / PROGRAM_RUN_INFO
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ATOMIC'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ATOMIC_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate atomic energies
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ATOMIC.ENERGY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ATOMIC_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate atomic pressure tensors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ATOMIC.PRESSURE'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A(MSection):
    '''
    Use DDAPC charges in a restraint (check code for details), section can be repeated,
    but only one constraint is possible at the moment.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.ATOMS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one),
        currently DDAPC only
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.COEFF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.TARGET'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B(MSection):
    '''
    Use DDAPC charges in a restraint (check code for details), section can be repeated,
    but only one constraint is possible at the moment.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.ATOMS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one),
        currently DDAPC only
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.COEFF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.TARGET'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A(MSection):
    '''
    Use DDAPC charges in a restraint (check code for details), section can be repeated,
    but only one constraint is possible at the moment.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.ATOMS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one),
        currently DDAPC only
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.COEFF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.TARGET'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B(MSection):
    '''
    Use DDAPC charges in a restraint (check code for details), section can be repeated,
    but only one constraint is possible at the moment.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that is summed in the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.ATOMS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the the coefficient of the atom in the atom list (default is one),
        currently DDAPC only
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.COEFF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_FUNCTIONAL_FORM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the term added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.FUNCTIONAL_FORM'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        force constant of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        target value of the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.TARGET'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.TYPE_OF_DENSITY'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING(MSection):
    '''
    specifies the two constraints/restraints for extracting ET coupling elements
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_TYPE_OF_CONSTRAINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.TYPE_OF_CONSTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_A'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_A'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_BECKE_RESTRAINT_B'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.BECKE_RESTRAINT_B'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_A'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_A'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_DDAPC_RESTRAINT_B'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.DDAPC_RESTRAINT_B'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE(MSection):
    '''
    This section is used to print the density derived atomic point charges.The fit of the
    charges is controlled through the DENSITY_FITTING section
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE_TYPE_OF_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of density used for the fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE.TYPE_OF_DENSITY'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT(MSection):
    '''
    The induced current density is calculated by DFPT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_CHI_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the succeptibility correction to the shift with PBC
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.CHI_PBC'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_COMMON_CENTER = Quantity(
        type=str,
        shape=[],
        description='''
        The common center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.COMMON_CENTER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_GAUGE_ATOM_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Build the gauge=atom using only the atoms within this radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.GAUGE_ATOM_RADIUS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_GAUGE = Quantity(
        type=str,
        shape=[],
        description='''
        The gauge used to compute the induced current within GAPW.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.GAUGE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_NBOX = Quantity(
        type=str,
        shape=[],
        description='''
        How many boxes along each directions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.NBOX'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_ORBITAL_CENTER = Quantity(
        type=str,
        shape=[],
        description='''
        The orbital center.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.ORBITAL_CENTER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_RESTART_CURRENT = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the induced current density calculation from a previous run (not working
        yet).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.RESTART_CURRENT'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the induced current calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_SELECTED_STATES_ATOM_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Select all the states included in the given radius arround each atoms in
        SELECTED_STATES_ON_ATOM_LIST.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.SELECTED_STATES_ATOM_RADIUS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_SELECTED_STATES_ON_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the atoms for selecting the states to be used for the response
        calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.SELECTED_STATES_ON_ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_USE_OLD_GAUGE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Use the old way to compute the gauge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.USE_OLD_GAUGE_ATOM'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT.INTERPOLATOR'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR(MSection):
    '''
    The g tensor is calculated by DFPT
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_RESTART_EPR = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the EPR calculation from a previous run (NOT WORKING)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.RESTART_EPR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the epr calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR.INTERPOLATOR'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE(MSection):
    '''
    Use one of the available methods to define the localization  and possibly to optimize
    it to a minimum or a maximum.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_CRAZY_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scale angles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.CRAZY_SCALE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_CRAZY_USE_DIAG = Quantity(
        type=str,
        shape=[],
        description='''
        Use diagonalization (slow) or pade based calculation of matrix exponentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.CRAZY_USE_DIAG'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_ENERGY_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Select the orbitals to be localized within the given energy range.This type of
        selection cannot be added on top of the selection through a LIST. It reads to
        reals that are lower and higher boundaries of the energy range.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.ENERGY_RANGE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_EPS_LOCALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance used in the convergence criterium of the localization methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.EPS_LOCALIZATION'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_EPS_OCCUPATION = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance in the occupation number to select only fully occupied orbitals for the
        rotation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.EPS_OCCUPATION'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_JACOBI_FALLBACK = Quantity(
        type=str,
        shape=[],
        description='''
        Use Jacobi method in case no convergence was achieved by using the crazy rotations
        method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.JACOBI_FALLBACK'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_LIST_UNOCCUPIED = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the unoccupied states to be localized, up to now only valid in
        combination with GPW. This keyword has to be present if unoccupied states should
        be localized. This keyword can be repeated several times(useful if you have to
        specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.LIST_UNOCCUPIED'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Indexes of the occupied wfn to be localizedThis keyword can be repeated several
        times(useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_LOCHOMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for occupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.LOCHOMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_LOCLUMO_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the MOS fromwhich to restart the localization procedure
        for unoccupied states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.LOCLUMO_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_MAX_CRAZY_ANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Largest allowed angle for the crazy rotations algorithm (smaller is slower but
        more stable).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.MAX_CRAZY_ANGLE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations used for localization methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Method of optimization if any
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.METHOD'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_MIN_OR_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Requires the maximization of the spread of the wfn
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.MIN_OR_MAX'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_OPERATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Type of opertator which defines the spread functional
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.OPERATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_OUT_ITER_EACH = Quantity(
        type=str,
        shape=[],
        description='''
        Every how many iterations of the localization algorithm(Jacobi) the tolerance
        value is printed out
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.OUT_ITER_EACH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the localization from a set of orbitals read from a localization restart
        file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.RESTART'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the MOS localization procedure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_STATES = Quantity(
        type=str,
        shape=[],
        description='''
        Which states to localize, LUMO up to now only available in GPW
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.STATES'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE_USE_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        Generate an improved initial guess based on a history of results, which is useful
        during MD.Will only work if the number of states to be localized remains constant.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE.USE_HISTORY'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR(MSection):
    '''
    The chemical shift is calculated by DFPT.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATE_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the soft part of the chemical shift by interpolation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATE_SHIFT'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_NICS_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the file with the NICS points coordinates
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.NICS_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_NICS = Quantity(
        type=str,
        shape=[],
        description='''
        Calculate the chemical shift in a set of points   given from an external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.NICS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_RESTART_NMR = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the NMR calculation from a previous run (NOT WORKING YET)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.RESTART_NMR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the nmr calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_SHIFT_GAPW_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        While computing the local part of the shift (GAPW), the integration is restricted
        to nuclei that are within this radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.SHIFT_GAPW_RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR.INTERPOLATOR'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR(MSection):
    '''
    Compute polarizabilities.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_DO_RAMAN = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the electric-dipole--electric-dipole polarizability
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.DO_RAMAN'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the polarizability calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR.INTERPOLATOR'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN(MSection):
    '''
    Compute indirect spin-spin coupling constants.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_DO_DSO = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the diamagnetic spin-orbit contribution (NOT YET IMPLEMENTED)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.DO_DSO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_DO_FC = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the Fermi contact contribution
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.DO_FC'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_DO_PSO = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the paramagnetic spin-orbit contribution
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.DO_PSO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_DO_SD = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the spin-dipolar contribution
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.DO_SD'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_ISSC_ON_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Atoms for which the issc is computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.ISSC_ON_ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_RESTART_SPINSPIN = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the spin-spin calculation from a previous run (NOT WORKING YET)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.RESTART_SPINSPIN'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the nmr calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN.INTERPOLATOR'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES(MSection):
    '''
    The linear response is used to calculate one of the  following properties: nmr, epr,
    raman, ...
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_ENERGY_GAP = Quantity(
        type=str,
        shape=[],
        description='''
        Energy gap estimate [a.u.] for preconditioning
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.ENERGY_GAP'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_EPS = Quantity(
        type=str,
        shape=[],
        description='''
        target accuracy for the convergence of the conjugate gradient.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.EPS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of conjugate gradient iteration to be performed for one
        optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_PRECONDITIONER = Quantity(
        type=str,
        shape=[],
        description='''
        Type of preconditioner to be used with all minimization schemes. They differ in
        effectiveness, cost of construction, cost of application. Properly preconditioned
        minimization can be orders of magnitude faster than doing nothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.PRECONDITIONER'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_RESTART_EVERY = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the conjugate gradient after the specified number of iterations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.RESTART_EVERY'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the response calculation if the restart file exists
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.RESTART'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_LINRES_WFN_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Root of the file names where to read the response functions fromwhich to restart
        the calculation of the linear response
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.LINRES.WFN_RESTART_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_CURRENT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.CURRENT'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_EPR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.EPR'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_LOCALIZE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.LOCALIZE'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_NMR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.NMR'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_POLAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.POLAR'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES_SPINSPIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES.SPINSPIN'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT(MSection):
    '''
    specifies a linear constraint on the fitted charges.This can be used to give equal
    values to equivalent atoms.sum over atom_list c_i * q_i = t
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT_ATOM_COEF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the coefficient of the atom in this linear constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT.ATOM_COEF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the list of atoms involved in this constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT.ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT_EQUAL_CHARGES = Quantity(
        type=str,
        shape=[],
        description='''
        All atoms in ATOM_LIST are constrained to have the same charges. When using this
        keyword, TARGET and ATOM_COEF do not need to be set and will be ignored. Instead
        of using this keyword, the constraint section could be repeated.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT.EQUAL_CHARGES'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        the target value for the constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT.TARGET'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS(MSection):
    '''
    Specifies the parameter for sampling the RESP fitting points for non-periodic systems,
    i.e. systems that do not involve surfaces. This section can be used with periodic and
    nonperiodic Poisson solvers, it only affects the sampling of grid points. All grid
    points in the shell defined by rmin and rmax are accepted for fitting.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_RMAX_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum distance a fit point is away from an atom of a given kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.RMAX_KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum distance a fit point is away from an atom. Valid for all
        atomic kinds for which no RMAX_KIND are specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.RMAX'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_RMIN_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the minimum distance a fit point is away from an atom of a given kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.RMIN_KIND'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the minimum distance a fit point is away from an atom. Valid for all
        atomic kinds for which no RMIN_KIND are specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.RMIN'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_X_HI = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the upper boundary of the box along X used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.X_HI'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_X_LOW = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the lower boundary of the box along X used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.X_LOW'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_Y_HI = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the upper boundary of the box along Y used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.Y_HI'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_Y_LOW = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the lower boundary of the box along Y used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.Y_LOW'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_Z_HI = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the upper boundary of the box along Z used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.Z_HI'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS_Z_LOW = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the lower boundary of the box along Z used to sample the potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS.Z_LOW'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS(MSection):
    '''
    Specifies the parameter for sampling the RESP fitting points for periodic systems,
    i.e. systems that involve surfaces. This section can only be used with periodic
    Poisson solver and cell. To see, which grid points were used, switch on
    COORD_FIT_POINTS in the PRINT section.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of indexes of atoms used to define the region for the RESP
        fitting. The list should contain indexes of atoms of the first surface layer.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS.ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Length of the sampling box, i.e. a box of this length and the height specified by
        RANGE is defined above each surface atom given in ATOM_LIST. The grid points in
        the boxes are accepted as fitting point. Should be in the range of the nearest
        neighbour distance (a bit larger to be on the safe side). Allows for a refined
        sampling of grid points in case of corrugated surfaces.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS.LENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Range where the fitting points are sampled. A range of 3 to 5 Angstroms means that
        the fitting points are sampled in the region of 3 to 5 Angstroms above the surface
        which is defined by atom indexes given in ATOM_LIST.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS.RANGE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS_SURF_DIRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies what above the surface means. Defines the direction.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS.SURF_DIRECTION'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT(MSection):
    '''
    specifies a restraint on the fitted charges.This can be used to restrain values to
    zero.s*(sum over atom_list q_i - t)**2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT_ATOM_COEF = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the coefficient of the atom in this linear restraint. If given, the
        restraint will be: s*(sum over atom_list c_i * q_i - t)**2
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT.ATOM_COEF'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the list of atoms involved in this restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT.ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        the target value for the constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT.STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        the target value for the restraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT.TARGET'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP(MSection):
    '''
    Requests a RESP fit of charges. When using a periodic Poisson solver and a periodic
    cell, the periodic RESP routines are used. If the Hartree potential matches with the
    one of an isolated system (i.e. isolated Poisson solver and big, nonperiodic cells),
    the nonperiodic RESP routines are automatically used. The subsections NONPERIODIC_SYS
    and PERIODIC_SYS do not request a nonperiodic or periodic solution, they only
    determine the sampling of the fitting points. All restraints are harmonic!
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_INTEGER_TOTAL_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Forces the total charge to be integer
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.INTEGER_TOTAL_CHARGE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAIN_HEAVIES_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        If defined, enforce the restraint of non-hydrogen atoms to zero. Its value is the
        strength of the restraint on the heavy atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAIN_HEAVIES_STRENGTH'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAIN_HEAVIES_TO_ZERO = Quantity(
        type=str,
        shape=[],
        description='''
        Restrain non-hydrogen atoms to zero.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAIN_HEAVIES_TO_ZERO'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_STRIDE = Quantity(
        type=str,
        shape=[],
        description='''
        The stride (X,Y,Z) used to write the cube file (larger values result in smaller
        cube files). You can provide 3 numbers (for X,Y,Z) or 1 number valid for all
        components.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.STRIDE'))

    x_cp2k_input_FORCE_EVAL_PROPERTIES_RESP_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the value of the width of the Gaussian charge distribution carried by
        each atom. Needs only to be specified when using a periodic Poisson solver.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.PROPERTIES.RESP.WIDTH'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_CONSTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.CONSTRAINT'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_NONPERIODIC_SYS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.NONPERIODIC_SYS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_PERIODIC_SYS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.PERIODIC_SYS'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP.RESTRAINT'))


class x_cp2k_section_input_FORCE_EVAL_PROPERTIES(MSection):
    '''
    This section is used to set up the PROPERTIES calculation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ATOMIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ATOMIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ATOMIC'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_ET_COUPLING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.ET_COUPLING'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_FIT_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.FIT_CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_LINRES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.LINRES'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES_RESP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES.RESP'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_CELL_CELL_REF(MSection):
    '''
    Input parameters needed to set up the CELL_REF.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.CELL.CELL_REF'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_ABC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lengths of the cell vectors A, B, and C, which defines the diagonal
        elements of h matrix for an orthorhombic cell. For non-orthorhombic cells it is
        possible either to specify the angles ALPHA, BETA, GAMMA via ALPHA_BETA_GAMMA
        keyword or alternatively use the keywords A, B, and C. The convention is that A
        lies along the X-axis, B is in the XY plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.ABC'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_ALPHA_BETA_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the angles between the vectors A, B and C when using the ABC keyword. The
        convention is that A lies along the X-axis, B is in the XY plane. ALPHA is the
        angle between B and C, BETA is the angle between A and C and GAMMA the angle
        between A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.ALPHA_BETA_GAMMA'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_A = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector A. This defines the first
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.A'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_B = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector B. This defines the second
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.B'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_CELL_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the format of the cell file (if used)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.CELL_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Possibility to read the cell from an external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.CELL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_C = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector C. This defines the third
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.C'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_MULTIPLE_UNIT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of repetition in space (X, Y, Z) of the defined cell,
        assuming it as a unit cell. This keyword affects only the CELL specification. The
        same keyword in SUBSYS%TOPOLOGY%MULTIPLE_UNIT_CELL should be modified in order to
        affect the coordinates specification.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.MULTIPLE_UNIT_CELL'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions for which periodic boundary conditions (PBC) will be
        applied. Important notice: This applies to the generation of the pair lists as
        well as to the application of the PBCs to positions. See the POISSON section to
        specify the periodicity used for the electrostatics. Typically the settings should
        be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_REF_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Imposes an initial cell symmetry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_REF.SYMMETRY'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_CELL(MSection):
    '''
    Input parameters needed to set up the CELL.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.CELL'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_ABC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lengths of the cell vectors A, B, and C, which defines the diagonal
        elements of h matrix for an orthorhombic cell. For non-orthorhombic cells it is
        possible either to specify the angles ALPHA, BETA, GAMMA via ALPHA_BETA_GAMMA
        keyword or alternatively use the keywords A, B, and C. The convention is that A
        lies along the X-axis, B is in the XY plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.ABC'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_ALPHA_BETA_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the angles between the vectors A, B and C when using the ABC keyword. The
        convention is that A lies along the X-axis, B is in the XY plane. ALPHA is the
        angle between B and C, BETA is the angle between A and C and GAMMA the angle
        between A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.ALPHA_BETA_GAMMA'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_A = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector A. This defines the first
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.A'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_B = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector B. This defines the second
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.B'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the format of the cell file (if used)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Possibility to read the cell from an external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.CELL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_C = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector C. This defines the third
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.C'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_MULTIPLE_UNIT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of repetition in space (X, Y, Z) of the defined cell,
        assuming it as a unit cell. This keyword affects only the CELL specification. The
        same keyword in SUBSYS%TOPOLOGY%MULTIPLE_UNIT_CELL should be modified in order to
        affect the coordinates specification.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.MULTIPLE_UNIT_CELL'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions for which periodic boundary conditions (PBC) will be
        applied. Important notice: This applies to the generation of the pair lists as
        well as to the application of the PBCs to positions. See the POISSON section to
        specify the periodicity used for the electrostatics. Typically the settings should
        be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_QMMM_CELL_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Imposes an initial cell symmetry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CELL.SYMMETRY'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_CELL_CELL_REF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_CELL_CELL_REF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.CELL.CELL_REF'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE(MSection):
    '''
    Specify information to add a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the first atom defining the direction along which the atom
        will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the charge for the added source of QM/MM potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling for the
        added source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling for the added
        source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE(MSection):
    '''
    Specify information to move a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link to be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling after
        movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling after movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK(MSection):
    '''
    Specify information on the QM/MM link treatment
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ALPHA_IMOMM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor to be used for projecting the forces on the capping
        hydrogen in the IMOMM QM/MM link scheme to the MM atom of the link. A good guess
        can be derived from the bond distances of the forcefield: alpha = r_eq(QM-MM) /
        r_eq(QM-H).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ALPHA_IMOMM'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the correction radius only for the MM atom involved
        in the link.Default is to use the same correction radius as for the specified
        type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_FIST_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword modifies the MM charge in FIST. The modified charge will be used then also
        for the generation of the QM/MM potential. Default 1.0 i.e. no charge rescaling of
        the MM atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.FIST_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_LINK_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the method to use to treat the defined QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.LINK_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link, Default hydrogen.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_QM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the QM atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.QM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_QM_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the element of the QM capping atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_QMMM_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword affects only the QM/MM potential, it doesn't affect the electrostatic in
        the classical part of the code. Default 1.0 i.e. no charge rescaling of the MM
        atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.QMMM_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the radius only for the MM atom involved in the
        link.Default is to use the same radius as for the specified type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_ADD_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.ADD_MM_CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK_MOVE_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK.MOVE_MM_CHARGE'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS(MSection):
    '''
    Information about possible links for automatic covalent bond breaking for the buffer
    QM/MM calculation.Ignored - need to implement buffer selection by atom and walking of
    connectivity data.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS_LINK'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS.LINK'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE(MSection):
    '''
    Specify information to add a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the first atom defining the direction along which the atom
        will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the charge for the added source of QM/MM potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling for the
        added source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling for the added
        source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE(MSection):
    '''
    Specify information to move a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link to be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling after
        movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling after movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK(MSection):
    '''
    Specify information on the QM/MM link treatment
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ALPHA_IMOMM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor to be used for projecting the forces on the capping
        hydrogen in the IMOMM QM/MM link scheme to the MM atom of the link. A good guess
        can be derived from the bond distances of the forcefield: alpha = r_eq(QM-MM) /
        r_eq(QM-H).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ALPHA_IMOMM'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the correction radius only for the MM atom involved
        in the link.Default is to use the same correction radius as for the specified
        type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_FIST_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword modifies the MM charge in FIST. The modified charge will be used then also
        for the generation of the QM/MM potential. Default 1.0 i.e. no charge rescaling of
        the MM atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.FIST_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_LINK_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the method to use to treat the defined QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.LINK_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link, Default hydrogen.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_QM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the QM atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.QM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_QM_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the element of the QM capping atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_QMMM_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword affects only the QM/MM potential, it doesn't affect the electrostatic in
        the classical part of the code. Default 1.0 i.e. no charge rescaling of the MM
        atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.QMMM_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the radius only for the MM atom involved in the
        link.Default is to use the same radius as for the specified type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_ADD_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.ADD_MM_CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK_MOVE_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK.MOVE_MM_CHARGE'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_QM_KIND(MSection):
    '''
    Information about the qm kind in the qm/mm scheme
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_QM_KIND_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        The indexes of the mm atoms that have this kind. This keyword can be repeated
        several times (useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.QM_KIND.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_QM_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The qm kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.QM_KIND.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE(MSection):
    '''
    List of atoms always in buffer region, non-adaptively, and any needed LINK sections
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_LINK'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.LINK'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_QM_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE_QM_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE.QM_KIND'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE_QM_KIND(MSection):
    '''
    Information about the qm kind in the qm/mm scheme
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE_QM_KIND_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        The indexes of the mm atoms that have this kind. This keyword can be repeated
        several times (useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE.QM_KIND.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE_QM_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The qm kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE.QM_KIND.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE(MSection):
    '''
    List of atoms always in QM region, non-adaptively
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE_QM_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE_QM_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE.QM_KIND'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_RESTART_INFO(MSection):
    '''
    This section provides information about old force-mixing indices and labels, for
    restarts.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.RESTART_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_RESTART_INFO_INDICES = Quantity(
        type=str,
        shape=[],
        description='''
        Indices of atoms in previous step QM regions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.RESTART_INFO.INDICES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_RESTART_INFO_LABELS = Quantity(
        type=str,
        shape=[],
        description='''
        Labels of atoms in previous step QM regions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.RESTART_INFO.LABELS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING(MSection):
    '''
    This section enables and defines parameters for force-mixing based QM/MM, which
    actually does two conventional QM/MM calculations, on a small  and a large QM region,
    and combines the MM forces from one and QM  forces from the other to create a complete
    set of forces.  Energy is  not conserved (although the QM/MM energy from the large QM
    region calculation is reported)  so a proper thermostat (i.e. massive, and able to
    handle dissipation, such as  Adaptive Langevin (AD_LANGEVIN)) must be used. For some
    propagation algorithms  (NVT and REFTRAJ MD ensembles) algorithm is adaptive,
    including molecules hysteretically based on their instantaneous distance from the core
    region.  Information on core/QM/buffer labels can be written in PDB file using
    MOTION&PRINT&FORCE_MIXING_LABELS.  Will fail if calculation requires a  meaningfull
    stress, or an energy that is consistent with the forces.  For GEO_OPT this means  only
    MOTION&GEO_OPT&TYPE CG, MOTION&GEO_OPT&CG&LINE_SEARCH&TYPE 2PNT, and
    MOTION&GEO_OPT&CG&LINE_SEARCH&2PNT&LINMIN_GRAD_ONLY T
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_ADAPTIVE_EXCLUDE_MOLECULES = Quantity(
        type=str,
        shape=[],
        description='''
        List of molecule names to exclude from adaptive regions (e.g. big things like
        proteins)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.ADAPTIVE_EXCLUDE_MOLECULES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_EXTENDED_DELTA_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Additional net charge in extended region relative to core (core charge is
        specified in DFT section, as usual for a convetional QM/MM calculation)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.EXTENDED_DELTA_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_MAX_N_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of QM atoms, for detection of runaway adaptive selection.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.MAX_N_QM'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_MOMENTUM_CONSERVATION_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Region to apply correction force to for momentum conservation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.MOMENTUM_CONSERVATION_REGION'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_MOMENTUM_CONSERVATION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        How to apply force to get momentum conservation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.MOMENTUM_CONSERVATION_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_EXTENDED_SEED_IS_ONLY_CORE_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Makes the extended QM zone be defined hysterestically  by distance from QM core
        list (i.e. atoms specified explicitly by  user) instead of from full QM core
        region (specified by user + hysteretic  selection + unbreakable bonds)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_EXTENDED_SEED_IS_ONLY_CORE_LIST'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_KIND_ELEMENT_MAPPING = Quantity(
        type=str,
        shape=[],
        description='''
        Mapping from elements to QM_KINDs for adaptively included atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_KIND_ELEMENT_MAPPING'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_R_BUF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the inner and outer radii of buffer region.  All atoms within this
        distance (hysteretically) of any QM atoms  will be buffer atoms in the force-
        mixing calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.R_BUF'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_R_CORE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the inner and outer radii of core QM region.  All molecules with any atoms
        within this distance (hysteretically) of any atoms  specified as QM in enclosing
        QM/MM section  will be core QM atoms in the force-mixing calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.R_CORE'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_R_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the inner and outer radii of QM dynamics region.  All molecules with atoms
        within this distance (hysteretically) of any atoms in  core will follow QM
        dynamics in the force-mixing calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.R_QM'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCE_MIXING_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Enables force-mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCE_MIXING.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_LINKS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_LINKS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_BUFFER_NON_ADAPTIVE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.BUFFER_NON_ADAPTIVE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_QM_NON_ADAPTIVE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.QM_NON_ADAPTIVE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_RESTART_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING_RESTART_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING.RESTART_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT(MSection):
    '''
    This section specifies the input parameters for a generic potential type.A functional
    form is specified. Mathematical Operators recognized are +, -, *, /, ** or
    alternatively ^, whereas symbols for brackets must be (). The function parser
    recognizes the (single argument) Fortran 90 intrinsic functions abs, exp, log10, log,
    sqrt, sinh, cosh, tanh, sin, cos, tan, asin, acos, atan. Parsing for INTRINSIC
    functions is CASE INsensitive.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.UNITS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.VALUES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variable of the functional form.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN(MSection):
    '''
    This section specifies the input parameters for GOODWIN potential type.Functional
    form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_DC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the DC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.DC'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.D'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_MC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the MC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.MC'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_M = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the M parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.M'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN_VR0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the VR0 parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN.VR0'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES(MSection):
    '''
    This section specifies the input parameters for LENNARD-JONES potential
    type.Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the EPSILON parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.EPSILON'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the SIGMA parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES.SIGMA'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS(MSection):
    '''
    This section specifies the input parameters for WILLIAMS potential type.Functional
    form: V(r) = A*EXP(-B*r) - C / r^6 .
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.A'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.B'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.C'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT(MSection):
    '''
    This section specifies the input parameters for a generic potential type.A functional
    form is specified. Mathematical Operators recognized are +, -, *, /, ** or
    alternatively ^, whereas symbols for brackets must be (). The function parser
    recognizes the (single argument) Fortran 90 intrinsic functions abs, exp, log10, log,
    sqrt, sinh, cosh, tanh, sin, cos, tan, asin, acos, atan. Parsing for INTRINSIC
    functions is CASE INsensitive.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the generic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.UNITS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.VALUES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variable of the functional form.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN(MSection):
    '''
    This section specifies the input parameters for GOODWIN potential type.Functional
    form: V(r) = EXP(M*(-(r/DC)**MC+(D/DC)**MC))*VR0*(D/r)**M.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_DC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the DC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.DC'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_D = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the D parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.D'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_MC = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the MC parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.MC'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_M = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the M parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.M'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN_VR0 = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the VR0 parameter of the Goodwin potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN.VR0'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES(MSection):
    '''
    This section specifies the input parameters for LENNARD-JONES potential
    type.Functional form: V(r) = 4.0 * EPSILON * [(SIGMA/r)^12-(SIGMA/r)^6].
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the EPSILON parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.EPSILON'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.RMIN'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the SIGMA parameter of the LJ potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES.SIGMA'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS(MSection):
    '''
    This section specifies the input parameters for WILLIAMS potential type.Functional
    form: V(r) = A*EXP(-B*r) - C / r^6 .
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind involved in the nonbond potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_A = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the A parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.A'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_B = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the B parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.B'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_C = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the C parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.C'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the cutoff parameter of the Williams potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the upper bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.RMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the lower bound of the potential. If not set the range is the full range
        generate by the spline
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS.RMIN'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14(MSection):
    '''
    This section specifies the input parameters for 1-4 NON-BONDED interactions.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GENPOT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GENPOT'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_GOODWIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.GOODWIN'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_LENNARD_JONES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.LENNARD-JONES'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14_WILLIAMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14.WILLIAMS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED(MSection):
    '''
    Specify information on the QM/MM non-bonded forcefield
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GENPOT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GENPOT'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_GOODWIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.GOODWIN'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_LENNARD_JONES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.LENNARD-JONES'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED_WILLIAMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED.WILLIAMS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD(MSection):
    '''
    Specify information on the QM/MM forcefield
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD'))

    x_cp2k_input_FORCE_EVAL_QMMM_FORCEFIELD_MULTIPLE_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        Enables the possibility to define NONBONDED and NONBONDED14 as a sum of different
        kinds of potential. Useful for piecewise defined potentials.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.FORCEFIELD.MULTIPLE_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED14'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED14'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD_NONBONDED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD.NONBONDED'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_IMAGE_CHARGE(MSection):
    '''
    Inclusion of polarization effects within the image charge approach for systems where
    QM molecules are physisorbed on e.g. metal surfaces described by MM. QM box size has
    to be equal to MM box size.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.IMAGE_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_DETERM_COEFF = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies how the coefficients are determined.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.DETERM_COEFF'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_EXT_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        External potential applied to the metal electrode
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.EXT_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_IMAGE_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        File name where to read the image matrix used as preconditioner in the iterative
        scheme
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.IMAGE_RESTART_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_MM_ATOM_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        List of MM atoms carrying an induced Gaussian charge. If this keyword is not
        given, all MM atoms will carry an image charge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.MM_ATOM_LIST'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_RESTART_IMAGE_MATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        Restart the image matrix. Useful when calculating coefficients iteratively (the
        image matrix is used as preconditioner in that case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.RESTART_IMAGE_MATRIX'))

    x_cp2k_input_FORCE_EVAL_QMMM_IMAGE_CHARGE_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the value of the width of the (induced) Gaussian charge distribution
        carried by each MM atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.IMAGE_CHARGE.WIDTH'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS(MSection):
    '''
    outputs a cube with the coefficents calculated for the spline interpolation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR(MSection):
    '''
    kind of interpolation used between the multigrids
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        the interpolator to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.PRECOND'))

    x_cp2k_input_FORCE_EVAL_QMMM_INTERPOLATOR_SAFE_COMPUTATION = Quantity(
        type=str,
        shape=[],
        description='''
        if a non unrolled calculation is to be performed in parallel
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INTERPOLATOR.SAFE_COMPUTATION'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR.CONV_INFO'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR_SPL_COEFFS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR.SPL_COEFFS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE(MSection):
    '''
    Specify information to add a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the first atom defining the direction along which the atom
        will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be added
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the charge for the added source of QM/MM potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling for the
        added source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling for the added
        source
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE(MSection):
    '''
    Specify information to move a classical charge before the QM/MM energies and forces
    evaluation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor that defines the movement along the defined direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE_ATOM_INDEX_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link to be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE.ATOM_INDEX_1'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE_ATOM_INDEX_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the second atom defining the direction along which  the
        atom will be moved
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE.ATOM_INDEX_2'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius used for the QM/MM electrostatic coupling after
        movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius used for the QM/MM electrostatic coupling after movement
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE.RADIUS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_LINK(MSection):
    '''
    Specify information on the QM/MM link treatment
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_ALPHA_IMOMM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor to be used for projecting the forces on the capping
        hydrogen in the IMOMM QM/MM link scheme to the MM atom of the link. A good guess
        can be derived from the bond distances of the forcefield: alpha = r_eq(QM-MM) /
        r_eq(QM-H).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.ALPHA_IMOMM'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the correction radius only for the MM atom involved
        in the link.Default is to use the same correction radius as for the specified
        type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_FIST_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword modifies the MM charge in FIST. The modified charge will be used then also
        for the generation of the QM/MM potential. Default 1.0 i.e. no charge rescaling of
        the MM atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.FIST_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_LINK_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the method to use to treat the defined QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.LINK_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the MM atom involved in the QM/MM link, Default hydrogen.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_QM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the QM atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.QM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_QM_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the element of the QM capping atom involved in the QM/MM link
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_QMMM_SCALE_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scaling factor for the MM charge involved in the link QM/MM. This
        keyword affects only the QM/MM potential, it doesn't affect the electrostatic in
        the classical part of the code. Default 1.0 i.e. no charge rescaling of the MM
        atom of the QM/MM link bond.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.QMMM_SCALE_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_LINK_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Overwrite the specification of the radius only for the MM atom involved in the
        link.Default is to use the same radius as for the specified type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.LINK.RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_ADD_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK.ADD_MM_CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_LINK_MOVE_MM_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK.MOVE_MM_CHARGE'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_MM_KIND(MSection):
    '''
    Information about the mm kind in the qm/mm scheme
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.MM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_MM_KIND_CORR_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the correction radius of the atomic kinds The correction radius is
        connected to the use of the compatibility keyword.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.MM_KIND.CORR_RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_MM_KIND_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the radius of the atomic kinds
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.MM_KIND.RADIUS'))

    x_cp2k_input_FORCE_EVAL_QMMM_MM_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The MM  kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.MM_KIND.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE(MSection):
    '''
    Controls the checking of the G-space term Spline Interpolation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR(MSection):
    '''
    controls the interpolation for the G-space term
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.PRECOND'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE(MSection):
    '''
    Controls the checking of the G-space term Spline Interpolation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR(MSection):
    '''
    controls the interpolation for the G-space term
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.PRECOND'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information during the run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE(MSection):
    '''
    This section is used to set up the decoupling of QM periodic images with the use of
    density derived atomic point charges. Switched on by default even if not explicitly
    given. Can be switched off if e.g. QM and MM box are of the same size.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_ANALYTICAL_GTERM = Quantity(
        type=str,
        shape=[],
        description='''
        Evaluates the Gterm in the Ewald Scheme analytically instead of using Splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.ANALYTICAL_GTERM'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_EWALD_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Precision achieved in the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.EWALD_PRECISION'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of grid points used for the Interpolation of the G-space term
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Real space cutoff for the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.RCUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the usage of the multipole section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_CHECK_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES(MSection):
    '''
    Enables the use of multipoles in the treatment of the electrostatics.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES_EPS_POL = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the rmsd threshold for the derivatives of the energy towards the Cartesian
        dipoles components
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES.EPS_POL'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES_MAX_IPOL_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of iterations for induced dipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES.MAX_IPOL_ITER'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES_MAX_MULTIPOLE_EXPANSION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum level of multipoles expansion used  for the electrostatics.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES.MAX_MULTIPOLE_EXPANSION'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES_POL_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the method to obtain self consistent induced multipole moments.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES.POL_SCF'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the Multipoles
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID(MSection):
    '''
    Set options that influence how the realspace grids are being distributed in parallel
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_DISTRIBUTION_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of slices in the x, y and z directions.-1 specifies that any
        number of slices is OK.If a given distribution can not be satisfied, a replicated
        grid will result.Also see LOCK_DISTRIBUTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.DISTRIBUTION_LAYOUT'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_DISTRIBUTION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Parallelization strategy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.DISTRIBUTION_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_HALO_REDUCTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to reduce the halo of the distributed grid (experimental features).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.HALO_REDUCTION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_LOCK_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, only basic QS deals correctly with a non-default value.If the
        distribution is locked, a grid will have the same distribution asthe next finer
        multigrid (provided it is distributed).If unlocked, all grids can be distributed
        freely.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.LOCK_DISTRIBUTION'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_MAX_DISTRIBUTED_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        If the multigrid-level of a grid is larger than the parameter, it will not be
        distributed in the automatic scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.MAX_DISTRIBUTED_LEVEL'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID_MEMORY_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A grid will only be distributed if the memory usage for that grid (including halo)
        is smaller than a replicated grid by this parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID.MEMORY_FACTOR'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD(MSection):
    '''
    Ewald parameters controlling electrostatic only for CLASSICAL MM.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        alpha parameter associated with Ewald (EWALD|PME|SPME). Recommended for small
        systems is is alpha = 3.5 / r_cut. Tuning alpha, r_cut and gmax is needed to
        obtain O(N**1.5) scaling for ewald.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_EPSILON = Quantity(
        type=str,
        shape=[],
        description='''
        tolerance of gaussians for fft interpolation (PME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.EPSILON'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_EWALD_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Expected accuracy in the Ewald sum. This number affects only the calculation of
        the cutoff for the real-space term of the ewald summation (EWALD|PME|SPME) as well
        as the construction of the neighbor lists (if the cutoff for non-bonded terms is
        smaller than the value employed to compute the EWALD real-space term). This
        keyword has no effect on the reciprocal space term (which can be tuned
        independently).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.EWALD_ACCURACY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_EWALD_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        The type of ewald you want to perform.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.EWALD_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_GMAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points (SPME and EWALD). If a single number is specified,the same
        number of points is used for all three directions on the grid.If three numbers are
        given, each direction can have a different number of points.The number of points
        needs to be FFTable (which depends on the library used) and odd for EWALD.The
        optimal number depends e.g. on alpha and the size of the cell. 1 point per
        Angstrom is common.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.GMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_NS_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points on small mesh (PME only), should be odd.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.NS_MAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_O_SPLINE = Quantity(
        type=str,
        shape=[],
        description='''
        order of the beta-Euler spline (SPME only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.O_SPLINE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Explicitly provide the real-space cutoff of the ewald summation (EWALD|PME|SPME).
        If present, overwrites the estimate of EWALD_ACCURACY and may affect the
        construction of the neighbor lists for non-bonded terms (in FIST), if the value
        specified is larger than the cutoff for non-bonded interactions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_MULTIPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.MULTIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD_RS_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD.RS_GRID'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MT(MSection):
    '''
    Sets up parameters of  Martyna-Tuckerman poisson solver. Note that exact results are
    only guaranteed if the unit cell is twice as large as charge density (and serious
    artefacts can result if the cell is much smaller).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MT'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MT_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence parameter ALPHA*RMIN. Default value 7.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MT.ALPHA'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MT_REL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the multiplicative factor for the CUTOFF keyword in MULTI_GRID  section.
        The result gives the cutoff at which the 1/r non-periodic FFT3D is
        evaluated.Default is 2.0
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MT.REL_CUTOFF'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE(MSection):
    '''
    Controls the checking of the G-space term Spline Interpolation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO(MSection):
    '''
    if convergence information about the linear solver of the spline methods should be
    printed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR(MSection):
    '''
    controls the interpolation for the G-space term
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_AINT_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        the approximate inverse to use to get the starting point for the linear solver of
        the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.AINT_PRECOND'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_EPS_R = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the residual for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.EPS_R'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_EPS_X = Quantity(
        type=str,
        shape=[],
        description='''
        accuracy on the solution for spline3 the interpolators
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.EPS_X'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        the maximum number of iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.MAX_ITER'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_PRECOND = Quantity(
        type=str,
        shape=[],
        description='''
        The preconditioner used for the linear solver of the spline3 methods
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.PRECOND'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR_CONV_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR.CONV_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing of basic information during the run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE(MSection):
    '''
    This section is used to set up the decoupling of QM periodic images with the use of
    density derived atomic point charges.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_ANALYTICAL_GTERM = Quantity(
        type=str,
        shape=[],
        description='''
        Evaluates the Gterm in the Ewald Scheme analytically instead of using Splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.ANALYTICAL_GTERM'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_EWALD_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        Precision achieved in the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.EWALD_PRECISION'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of grid points used for the Interpolation of the G-space term
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Real space cutoff for the Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_CHECK_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.CHECK_SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE.PROGRAM_RUN_INFO'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_WAVELET(MSection):
    '''
    Sets up parameters of  wavelet based poisson solver.This solver allows for non-
    periodic (PERIODIC NONE) boundary conditions and slab-boundary conditions (but only
    PERIODIC XZ).It does not require very large unit cells, only that the density goes to
    zero on the faces of the cell.The use of PREFERRED_FFT_LIBRARY FFTSG is required
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.WAVELET'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_WAVELET_SCF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of scaling function used in the wavelet approach, the total energy depends on
        this choice,and the convergence with respect to cutoff depends on the selected
        scaling functions.Possible values are 8,14,16,20,24,30,40,50,60,100
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.WAVELET.SCF_TYPE'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON(MSection):
    '''
    Sets up the poisson resolutor.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions on wich apply PBC. Important notice,  this only applies to
        the electrostatics. See the CELL section to specify the periodicity used for e.g.
        the pair lists. Typically the settings should be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_POISSON_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of solver to use to solve the Poisson equation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.POISSON_SOLVER'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_EWALD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.EWALD'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MT'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_MULTIPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.MULTIPOLE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_WAVELET = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON_WAVELET'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON.WAVELET'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC(MSection):
    '''
    Specify parameters for QM/MM periodic boundary conditions calculations
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_GMAX = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum value of G in the reciprocal space over which perform the
        Ewald sum.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.GMAX'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_NGRIDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of grid points used for the Interpolation of the G-space term
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.NGRIDS'))

    x_cp2k_input_FORCE_EVAL_QMMM_PERIODIC_REPLICA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of replica to take into consideration for the real part of
        the calculation. Default is letting the qmmm module decide how many replica you
        really need.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PERIODIC.REPLICA'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_CHECK_SPLINE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.CHECK_SPLINE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_MULTIPOLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.MULTIPOLE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC_POISSON'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC.POISSON'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_QM_KIND(MSection):
    '''
    Information about the qm kind in the qm/mm scheme
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.QM_KIND'))

    x_cp2k_input_FORCE_EVAL_QMMM_QM_KIND_MM_INDEX = Quantity(
        type=str,
        shape=[],
        description='''
        The indexes of the mm atoms that have this kind. This keyword can be repeated
        several times (useful if you have to specify many indexes).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.QM_KIND.MM_INDEX'))

    x_cp2k_input_FORCE_EVAL_QMMM_QM_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The qm kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.QM_KIND.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_QMMM_WALLS(MSection):
    '''
    Enables Walls for the QM box. This can be used to avoid that QM  atoms move out of the
    QM box.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.WALLS'))

    x_cp2k_input_FORCE_EVAL_QMMM_WALLS_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the the force constant for the quadratic wall
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.WALLS.K'))

    x_cp2k_input_FORCE_EVAL_QMMM_WALLS_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of wall
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.WALLS.TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_WALLS_WALL_SKIN = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the skin of the Wall in each dimension. The wall's effect is
        felt when atoms fall within the skin of the Wall.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.WALLS.WALL_SKIN'))


class x_cp2k_section_input_FORCE_EVAL_QMMM(MSection):
    '''
    Input for QM/MM calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM'))

    x_cp2k_input_FORCE_EVAL_QMMM_CENTER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword specifies whether the QM system is centered in units of the grid
        spacing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CENTER_GRID'))

    x_cp2k_input_FORCE_EVAL_QMMM_CENTER_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        How to do the centering
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CENTER_TYPE'))

    x_cp2k_input_FORCE_EVAL_QMMM_CENTER = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword sets when the qm system is automatically centered.  Default is
        EVERY_STEP.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.CENTER'))

    x_cp2k_input_FORCE_EVAL_QMMM_DELTA_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Additional net charge relative to that specified in DFT section.  Used
        automatically by force mixing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.DELTA_CHARGE'))

    x_cp2k_input_FORCE_EVAL_QMMM_E_COUPL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of the QM - MM electrostatic coupling.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.E_COUPL'))

    x_cp2k_input_FORCE_EVAL_QMMM_EPS_MM_RSPACE = Quantity(
        type=str,
        shape=[],
        description='''
        Set the threshold for the collocation of the GEEP gaussian functions.this keyword
        affects only the GAUSS E_COUPLING.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.EPS_MM_RSPACE'))

    x_cp2k_input_FORCE_EVAL_QMMM_INITIAL_TRANSLATION_VECTOR = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword specify the initial translation vector to be applied to the system.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.INITIAL_TRANSLATION_VECTOR'))

    x_cp2k_input_FORCE_EVAL_QMMM_MM_POTENTIAL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the file containing the potential expansion in gaussians. See the
        USE_GEEP_LIB keyword.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.MM_POTENTIAL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_QMMM_NOCOMPATIBILITY = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword disables the compatibility of QM/MM potential between CPMD and CP2K
        implementations. The compatibility is achieved using an MM potential of the form:
        Erf[x/rc]/x + (1/rc -2/(pi^1/2*rc))*Exp[-(x/rc)^2] .This keyword has effect only
        selecting GAUSS E_COUPLING type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.NOCOMPATIBILITY'))

    x_cp2k_input_FORCE_EVAL_QMMM_PARALLEL_SCHEME = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the parallel_scheme for the long range Potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.PARALLEL_SCHEME'))

    x_cp2k_input_FORCE_EVAL_QMMM_SPHERICAL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        Set the spherical cutoff for the QMMM electrostatic interaction. This acts like a
        charge multiplicative factor dependent on cutoff. For MM atoms farther than the
        SPHERICAL_CUTOFF(1) their charge is zero. The switch is performed with a smooth
        function: 0.5*(1-TANH((r-[SPH_CUT(1)-20*SPH_CUT(2)])/(SPH_CUT(2)))). Two values
        are required: the first one is the distance cutoff. The second one controls the
        stiffness of the smoothing.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.SPHERICAL_CUTOFF'))

    x_cp2k_input_FORCE_EVAL_QMMM_USE_GEEP_LIB = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the use of the internal GEEP library to generate the gaussian
        expansion of the MM potential. Using this keyword there's no need to provide the
        MM_POTENTIAL_FILENAME. It expects a number from 2 to 15 (the number of gaussian
        funtions to be used in the expansion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.QMMM.USE_GEEP_LIB'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_CELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_CELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.CELL'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCE_MIXING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCE_MIXING'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_FORCEFIELD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.FORCEFIELD'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_IMAGE_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_IMAGE_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.IMAGE_CHARGE'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_INTERPOLATOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.INTERPOLATOR'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_LINK = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_LINK'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.LINK'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_MM_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_MM_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.MM_KIND'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_PERIODIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.PERIODIC'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_QM_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_QM_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.QM_KIND'))

    x_cp2k_section_input_FORCE_EVAL_QMMM_WALLS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM_WALLS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM.WALLS'))


class x_cp2k_section_input_FORCE_EVAL_RESCALE_FORCES(MSection):
    '''
    Section controlling the rescaling of forces. Useful when starting from quite bad
    geometries with unphysically large forces.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.RESCALE_FORCES'))

    x_cp2k_input_FORCE_EVAL_RESCALE_FORCES_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Maximum Values of the force. If the force of one atom exceed this
        value it's rescaled to the MAX_FORCE value.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.RESCALE_FORCES.MAX_FORCE'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF(MSection):
    '''
    Input parameters needed to set up the CELL_REF.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_ABC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lengths of the cell vectors A, B, and C, which defines the diagonal
        elements of h matrix for an orthorhombic cell. For non-orthorhombic cells it is
        possible either to specify the angles ALPHA, BETA, GAMMA via ALPHA_BETA_GAMMA
        keyword or alternatively use the keywords A, B, and C. The convention is that A
        lies along the X-axis, B is in the XY plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.ABC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_ALPHA_BETA_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the angles between the vectors A, B and C when using the ABC keyword. The
        convention is that A lies along the X-axis, B is in the XY plane. ALPHA is the
        angle between B and C, BETA is the angle between A and C and GAMMA the angle
        between A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.ALPHA_BETA_GAMMA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_A = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector A. This defines the first
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_B = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector B. This defines the second
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_CELL_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the format of the cell file (if used)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.CELL_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Possibility to read the cell from an external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.CELL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_C = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector C. This defines the third
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.C'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_MULTIPLE_UNIT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of repetition in space (X, Y, Z) of the defined cell,
        assuming it as a unit cell. This keyword affects only the CELL specification. The
        same keyword in SUBSYS%TOPOLOGY%MULTIPLE_UNIT_CELL should be modified in order to
        affect the coordinates specification.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.MULTIPLE_UNIT_CELL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions for which periodic boundary conditions (PBC) will be
        applied. Important notice: This applies to the generation of the pair lists as
        well as to the application of the PBCs to positions. See the POISSON section to
        specify the periodicity used for the electrostatics. Typically the settings should
        be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Imposes an initial cell symmetry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF.SYMMETRY'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL(MSection):
    '''
    Input parameters needed to set up the CELL.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CELL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_ABC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lengths of the cell vectors A, B, and C, which defines the diagonal
        elements of h matrix for an orthorhombic cell. For non-orthorhombic cells it is
        possible either to specify the angles ALPHA, BETA, GAMMA via ALPHA_BETA_GAMMA
        keyword or alternatively use the keywords A, B, and C. The convention is that A
        lies along the X-axis, B is in the XY plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.ABC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_ALPHA_BETA_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the angles between the vectors A, B and C when using the ABC keyword. The
        convention is that A lies along the X-axis, B is in the XY plane. ALPHA is the
        angle between B and C, BETA is the angle between A and C and GAMMA the angle
        between A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.ALPHA_BETA_GAMMA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_A = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector A. This defines the first
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_B = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector B. This defines the second
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the format of the cell file (if used)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Possibility to read the cell from an external file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.CELL_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_C = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the Cartesian components for the cell vector C. This defines the third
        column of the h matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.C'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_MULTIPLE_UNIT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of repetition in space (X, Y, Z) of the defined cell,
        assuming it as a unit cell. This keyword affects only the CELL specification. The
        same keyword in SUBSYS%TOPOLOGY%MULTIPLE_UNIT_CELL should be modified in order to
        affect the coordinates specification.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.MULTIPLE_UNIT_CELL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the directions for which periodic boundary conditions (PBC) will be
        applied. Important notice: This applies to the generation of the pair lists as
        well as to the application of the PBCs to positions. See the POISSON section to
        specify the periodicity used for the electrostatics. Typically the settings should
        be the same.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.PERIODIC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CELL_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Imposes an initial cell symmetry.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CELL.SYMMETRY'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL_CELL_REF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CELL.CELL_REF'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE(MSection):
    '''
    This section defines the plane. When using this colvar, two plane section must be
    defined!
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of 3 atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.PLANE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE_DEF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify how the plane is defined: either by 3 atoms or by a fixed normal vector.
        At least one plane must be defined through atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.PLANE.DEF_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE_NORMAL_VECTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Alternatively to 3 atoms/points one can define one of the two, planes by defining
        its NORMAL vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.PLANE.NORMAL_VECTOR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE(MSection):
    '''
    This section defines the angle between two planes as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE(MSection):
    '''
    Section to define the angle as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the angle.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION(MSection):
    '''
    Section to define the rotation of a bond/line with respect toanother bond/line
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_P1_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.P1_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_P1_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the second bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.P1_BOND2'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_P2_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.P2_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_P2_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the second
        bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.P2_BOND2'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COLVAR_FUNC_INFO(MSection):
    '''
    Specify further data possibly used by colvars, depending on the starting geometry, for
    computing the functions value.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COLVAR_FUNC_INFO_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Colvar function data. The order is an internal order. So if you decide to
        edit/modify/add these values by hand you should know very well what you are
        doing.!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COLVAR_FUNC_INFO.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE(MSection):
    '''
    This section defines the plane. When using this colvar, two plane section must be
    defined!
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of 3 atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.PLANE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE_DEF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify how the plane is defined: either by 3 atoms or by a fixed normal vector.
        At least one plane must be defined through atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.PLANE.DEF_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE_NORMAL_VECTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Alternatively to 3 atoms/points one can define one of the two, planes by defining
        its NORMAL vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.PLANE.NORMAL_VECTOR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE(MSection):
    '''
    This section defines the angle between two planes as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE(MSection):
    '''
    Section to define the angle as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the angle.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION(MSection):
    '''
    Section to define the rotation of a bond/line with respect toanother bond/line
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_P1_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.P1_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_P1_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the second bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.P1_BOND2'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_P2_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.P2_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_P2_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the second
        bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.P2_BOND2'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COLVAR_FUNC_INFO(MSection):
    '''
    Specify further data possibly used by colvars, depending on the starting geometry, for
    computing the functions value.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COLVAR_FUNC_INFO_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Colvar function data. The order is an internal order. So if you decide to
        edit/modify/add these values by hand you should know very well what you are
        doing.!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COLVAR_FUNC_INFO.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE(MSection):
    '''
    Section to define the conditioned distance as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_ATOMS_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points from which the distance is computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.ATOMS_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lambda parameter at the exponent of the conditioned distance function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION(MSection):
    '''
    Section to define the coordination number as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_ATOMS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        indexes of the third set of atoms/points.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.ATOMS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_KINDS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.KINDS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_ND_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the denominator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.ND_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_NN_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the numerator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.NN_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_R0_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, specify the R0
        parameter in the second coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.R0_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION(MSection):
    '''
    Section to define functions between two distances as collective variables. The
    function is defined as d1+coeff*d2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points for the two bonds d1=(1-2) d2=(3-4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_COEFFICIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coefficient in the function for the constraint. -1.0 has to be used
        for distance difference, 1.0 for distance addition
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.COEFFICIENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE(MSection):
    '''
    Section to define the distance of a point from a plane as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_ATOM_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the atom/point index defining the point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.ATOM_POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_ATOMS_PLANE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.ATOMS_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE(MSection):
    '''
    Section to define the distance as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_AXIS = Quantity(
        type=str,
        shape=[],
        description='''
        Define the axes along which the colvar should be evaluated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.AXIS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS(MSection):
    '''
    Section to define the gyration radius as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points defyining the gyration radius variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_KINDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms defining the gyration radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.KINDS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_NPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points in the path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.NPOINTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.RCUT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for shifting each term in the sum
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.SHIFT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM(MSection):
    '''
    Section to define the formation of a hydronium as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_HYDROGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.HYDROGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the LAMBDA parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the NH parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.NH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_OXYGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.OXYGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_PNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.PNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_PNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.PNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_P = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.P'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_QNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.QNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_QNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.QNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_Q = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.Q'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_ROH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROH parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.ROH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_ROO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROO parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.ROO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION(MSection):
    '''
    Section to define the population of specie as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_N0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the n0 parameter that sets the coordination of the species.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.N0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.R0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the gaussian width of used to build the population istogram.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.SIGMA'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM(MSection):
    '''
    Section to define the Q parameter (crystalline order parameter) as a collective
    variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the width of the Fermi-Dirac style smearing around RCUT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.ALPHA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_L = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the L spherical harmonics from Ylm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the distance cutoff for neighbors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING(MSection):
    '''
    Section to define general ring puckering collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the ring.At least 4 Atoms are
        needed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_COORDINATE = Quantity(
        type=str,
        shape=[],
        description='''
        Indicate the coordinate to be used. Follow the Cremer-Pople definition for a N
        ring.0 is the total puckering variable Q,2..[N/2] are puckering
        coordinates.-2..-[N/2-1] are puckering angles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.COORDINATE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME(MSection):
    '''
    Specify coordinates of the frame (number of frames can be either 1 or 2)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD(MSection):
    '''
    Section to define a CV as function of RMSD computed with respect to given reference
    configurations. For 2 configurations the colvar is equal to: ss = (RMSDA-
    RMSDB)/(RMSDA+RMSDB), while if only 1 configuration is given, then the colvar is just
    the RMSD from that frame.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify weights of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.WEIGHTS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD.FRAME'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION(MSection):
    '''
    Section to define the torsion as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the torsion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED(MSection):
    '''
    This section allows to use any function of the energy subsystems  in a mixed_env
    calculation as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.DX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_ENERGY_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the collective variable in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.ENERGY_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.UNITS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.VALUES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variables of the functional form. To allow an efficient mapping the
        order of the energy variables will be considered identical to the order of the
        force_eval in the force_eval_order list.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U(MSection):
    '''
    Section to define the energy as a generalized collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U.MIXED'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG(MSection):
    '''
    Section to define the distance of an atom from its starting position
    ((X-X(0))^2+(Y-Y(0))^2+(Z-Z(0))^2) or part of its components as a collective
    variable.If absolute_position is specified, instead the CV is represented by the
    instantaneous position of the atom (only available for X, Y or Z components).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_ABSOLUTE_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, the absolute position of the atoms will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.ABSOLUTE_POSITION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atom/point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.ATOM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_COMPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.COMPONENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG(MSection):
    '''
    Section to define the cross term (XA-XA(0))*(XB-XB(0))+(XA-XA(0))*(YB-YB(0)) or part
    of its components as a collective variable. The final term is given by the product  of
    the components of A with the components of B.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atoms/points A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_COMPONENT_A = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom A.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.COMPONENT_A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_COMPONENT_B = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.COMPONENT_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR(MSection):
    '''
    This section specifies the nature of the collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_ANGLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.ANGLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_BOND_ROTATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.BOND_ROTATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COLVAR_FUNC_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COLVAR_FUNC_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_CONDITIONED_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_COORDINATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.COORDINATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_FUNCTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE_POINT_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_GYRATION_RADIUS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.GYRATION_RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HBP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HBP'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_HYDRONIUM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.HYDRONIUM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_POPULATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.POPULATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_QPARM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.QPARM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RING_PUCKERING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RING_PUCKERING'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_RMSD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.RMSD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.TORSION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_U'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_WC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.WC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_DIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_DIAG'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR_XYZ_OUTERDIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR.XYZ_OUTERDIAG'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR(MSection):
    '''
    Allows the possibility to combine several COLVARs into one COLVAR with a generic
    function.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative of the combination of COLVARs with the
        Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.DX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the function used to combine different COLVARs into one.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of  parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.VALUES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the variable that parametrises the FUNCTION defining how
        COLVARS should be combined. The matching follows the same order of the COLVARS
        definition in the input file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.VARIABLES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR_COLVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR.COLVAR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE(MSection):
    '''
    Section to define the conditioned distance as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_ATOMS_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points from which the distance is computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.ATOMS_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lambda parameter at the exponent of the conditioned distance function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION(MSection):
    '''
    Section to define the coordination number as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_ATOMS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        indexes of the third set of atoms/points.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.ATOMS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_KINDS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.KINDS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_ND_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the denominator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.ND_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_NN_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the numerator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.NN_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_R0_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, specify the R0
        parameter in the second coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.R0_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE(MSection):
    '''
    This section defines the plane. When using this colvar, two plane section must be
    defined!
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of 3 atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_DEF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify how the plane is defined: either by 3 atoms or by a fixed normal vector.
        At least one plane must be defined through atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.DEF_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_NORMAL_VECTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Alternatively to 3 atoms/points one can define one of the two, planes by defining
        its NORMAL vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.NORMAL_VECTOR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE(MSection):
    '''
    This section defines the angle between two planes as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE(MSection):
    '''
    Section to define the angle as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the angle.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION(MSection):
    '''
    Section to define the rotation of a bond/line with respect toanother bond/line
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_P1_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.P1_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_P1_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the second bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.P1_BOND2'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_P2_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.P2_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_P2_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the second
        bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.P2_BOND2'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COLVAR_FUNC_INFO(MSection):
    '''
    Specify further data possibly used by colvars, depending on the starting geometry, for
    computing the functions value.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COLVAR_FUNC_INFO_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Colvar function data. The order is an internal order. So if you decide to
        edit/modify/add these values by hand you should know very well what you are
        doing.!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COLVAR_FUNC_INFO.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE(MSection):
    '''
    Section to define the conditioned distance as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points from which the distance is computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lambda parameter at the exponent of the conditioned distance function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION(MSection):
    '''
    Section to define the coordination number as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_ATOMS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        indexes of the third set of atoms/points.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.ATOMS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_KINDS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.KINDS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_ND_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the denominator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.ND_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_NN_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the numerator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.NN_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_R0_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, specify the R0
        parameter in the second coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.R0_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION(MSection):
    '''
    Section to define functions between two distances as collective variables. The
    function is defined as d1+coeff*d2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points for the two bonds d1=(1-2) d2=(3-4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_COEFFICIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coefficient in the function for the constraint. -1.0 has to be used
        for distance difference, 1.0 for distance addition
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.COEFFICIENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE(MSection):
    '''
    Section to define the distance of a point from a plane as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_ATOM_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the atom/point index defining the point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.ATOM_POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_ATOMS_PLANE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.ATOMS_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE(MSection):
    '''
    Section to define the distance as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_AXIS = Quantity(
        type=str,
        shape=[],
        description='''
        Define the axes along which the colvar should be evaluated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.AXIS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS(MSection):
    '''
    Section to define the gyration radius as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points defyining the gyration radius variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_KINDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms defining the gyration radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.KINDS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_NPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points in the path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.NPOINTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.RCUT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for shifting each term in the sum
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.SHIFT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM(MSection):
    '''
    Section to define the formation of a hydronium as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_HYDROGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.HYDROGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the LAMBDA parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the NH parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.NH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_OXYGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.OXYGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_PNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.PNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_PNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.PNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_P = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.P'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_QNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.QNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_QNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.QNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_Q = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.Q'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_ROH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROH parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.ROH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_ROO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROO parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.ROO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION(MSection):
    '''
    Section to define the population of specie as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_N0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the n0 parameter that sets the coordination of the species.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.N0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.R0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the gaussian width of used to build the population istogram.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.SIGMA'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM(MSection):
    '''
    Section to define the Q parameter (crystalline order parameter) as a collective
    variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the width of the Fermi-Dirac style smearing around RCUT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.ALPHA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_L = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the L spherical harmonics from Ylm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the distance cutoff for neighbors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING(MSection):
    '''
    Section to define general ring puckering collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the ring.At least 4 Atoms are
        needed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_COORDINATE = Quantity(
        type=str,
        shape=[],
        description='''
        Indicate the coordinate to be used. Follow the Cremer-Pople definition for a N
        ring.0 is the total puckering variable Q,2..[N/2] are puckering
        coordinates.-2..-[N/2-1] are puckering angles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.COORDINATE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME(MSection):
    '''
    Specify coordinates of the frame (number of frames can be either 1 or 2)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD(MSection):
    '''
    Section to define a CV as function of RMSD computed with respect to given reference
    configurations. For 2 configurations the colvar is equal to: ss = (RMSDA-
    RMSDB)/(RMSDA+RMSDB), while if only 1 configuration is given, then the colvar is just
    the RMSD from that frame.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify weights of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.WEIGHTS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD.FRAME'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION(MSection):
    '''
    Section to define the torsion as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the torsion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED(MSection):
    '''
    This section allows to use any function of the energy subsystems  in a mixed_env
    calculation as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.DX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_ENERGY_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the collective variable in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.ENERGY_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.UNITS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.VALUES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variables of the functional form. To allow an efficient mapping the
        order of the energy variables will be considered identical to the order of the
        force_eval in the force_eval_order list.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U(MSection):
    '''
    Section to define the energy as a generalized collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U.MIXED'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG(MSection):
    '''
    Section to define the distance of an atom from its starting position
    ((X-X(0))^2+(Y-Y(0))^2+(Z-Z(0))^2) or part of its components as a collective
    variable.If absolute_position is specified, instead the CV is represented by the
    instantaneous position of the atom (only available for X, Y or Z components).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_ABSOLUTE_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, the absolute position of the atoms will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.ABSOLUTE_POSITION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atom/point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.ATOM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_COMPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.COMPONENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG(MSection):
    '''
    Section to define the cross term (XA-XA(0))*(XB-XB(0))+(XA-XA(0))*(YB-YB(0)) or part
    of its components as a collective variable. The final term is given by the product  of
    the components of A with the components of B.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atoms/points A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_COMPONENT_A = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom A.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.COMPONENT_A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_COMPONENT_B = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.COMPONENT_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR(MSection):
    '''
    This section specifies the nature of the collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_ANGLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.ANGLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_BOND_ROTATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.BOND_ROTATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COLVAR_FUNC_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COLVAR_FUNC_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_CONDITIONED_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_COORDINATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.COORDINATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_FUNCTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE_POINT_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_GYRATION_RADIUS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.GYRATION_RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HBP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HBP'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_HYDRONIUM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.HYDRONIUM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_POPULATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.POPULATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_QPARM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.QPARM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RING_PUCKERING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RING_PUCKERING'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_RMSD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.RMSD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.TORSION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_U'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_WC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.WC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_DIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_DIAG'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR_XYZ_OUTERDIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR.XYZ_OUTERDIAG'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME(MSection):
    '''
    Specify coordinates of the frame
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP(MSection):
    '''
    Activating this print key will print once a file with the values of the FUNCTION on a
    grid of COLVAR values in a specified range. GRID_SPACING and RANGE for every COLVAR
    has to be specified again in the same order as they are in the input.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.FILENAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_GRID_SPACING = Quantity(
        type=str,
        shape=[],
        description='''
        Distance between two gridpoints for the grid on the COLVAR
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.GRID_SPACING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        The range of of the grid of the COLVAR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.RANGE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH(MSection):
    '''
    Section defining the distance from a one dimensional reaction path in an Q-dimensional
    space of colvars. Constraining this colvar, allows to sample the space equidistant to
    the reaction path, both in the Q-dimensional colvar and 3N-Q remaining coordinates.
    For the details of the function see cited literature.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_DISTANCES_RMSD = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for DISTANCES_RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.DISTANCES_RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the ith element of the vector valued function that defines the reaction
        path. This keyword needs to repeat exactly Q times, and the order must match the
        order of the colvars. The VARIABLE (e.g. T) which parametrises the curve can be
        used as the target of a constraint.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the exponent of the Gaussian used in the integral representation of the
        colvar.The shape of the space orthogonal to the reaction path is defined by this
        choice. In the limit of large values, it is given by the plane orthogonal to the
        path.In practice, modest values are required for stable numerical integration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        The range of VARIABLE used for the parametrisation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.RANGE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_RMSD = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Step size in the numerical integration, a few thousand points are common, and the
        proper number also depends on LAMBDA.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.STEP_SIZE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_VARIABLE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the variable that parametrises the FUNCTION defining the
        reaction path.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.VARIABLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_COLVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.FRAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH_MAP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH.MAP'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION(MSection):
    '''
    Section to define functions between two distances as collective variables. The
    function is defined as d1+coeff*d2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points for the two bonds d1=(1-2) d2=(3-4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_COEFFICIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coefficient in the function for the constraint. -1.0 has to be used
        for distance difference, 1.0 for distance addition
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.COEFFICIENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE(MSection):
    '''
    Section to define the distance of a point from a plane as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_ATOM_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the atom/point index defining the point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.ATOM_POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_ATOMS_PLANE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.ATOMS_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE(MSection):
    '''
    Section to define the distance as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_AXIS = Quantity(
        type=str,
        shape=[],
        description='''
        Define the axes along which the colvar should be evaluated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.AXIS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS(MSection):
    '''
    Section to define the gyration radius as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points defyining the gyration radius variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_KINDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms defining the gyration radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.KINDS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HBP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_NPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points in the path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.NPOINTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.RCUT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for shifting each term in the sum
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.SHIFT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HBP.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM(MSection):
    '''
    Section to define the formation of a hydronium as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_HYDROGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.HYDROGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the LAMBDA parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the NH parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.NH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_OXYGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.OXYGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_PNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.PNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_PNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.PNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_P = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.P'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_QNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.QNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_QNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.QNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_Q = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.Q'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_ROH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROH parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.ROH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_ROO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROO parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.ROO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION(MSection):
    '''
    Section to define the population of specie as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_N0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the n0 parameter that sets the coordination of the species.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.N0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.R0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the gaussian width of used to build the population istogram.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.SIGMA'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM(MSection):
    '''
    Section to define the Q parameter (crystalline order parameter) as a collective
    variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the width of the Fermi-Dirac style smearing around RCUT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.ALPHA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_L = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the L spherical harmonics from Ylm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the distance cutoff for neighbors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE(MSection):
    '''
    This section defines the plane. When using this colvar, two plane section must be
    defined!
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of 3 atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_DEF_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify how the plane is defined: either by 3 atoms or by a fixed normal vector.
        At least one plane must be defined through atoms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.DEF_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE_NORMAL_VECTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Alternatively to 3 atoms/points one can define one of the two, planes by defining
        its NORMAL vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE.NORMAL_VECTOR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE(MSection):
    '''
    This section defines the angle between two planes as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE(MSection):
    '''
    Section to define the angle as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the angle.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION(MSection):
    '''
    Section to define the rotation of a bond/line with respect toanother bond/line
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_P1_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.P1_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_P1_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the first pointof the second bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.P1_BOND2'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_P2_BOND1 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the first bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.P2_BOND1'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_P2_BOND2 = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of atom/point defining the second pointof the second
        bond/line.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.P2_BOND2'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COLVAR_FUNC_INFO(MSection):
    '''
    Specify further data possibly used by colvars, depending on the starting geometry, for
    computing the functions value.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COLVAR_FUNC_INFO_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Colvar function data. The order is an internal order. So if you decide to
        edit/modify/add these values by hand you should know very well what you are
        doing.!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COLVAR_FUNC_INFO.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE(MSection):
    '''
    Section to define the conditioned distance as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points from which the distance is computed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the lambda parameter at the exponent of the conditioned distance function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION(MSection):
    '''
    Section to define the coordination number as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_ATOMS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        indexes of the third set of atoms/points.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.ATOMS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_KINDS_TO_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, here specify
        alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.KINDS_TO_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_ND_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the denominator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.ND_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_NN_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers,Sets the value
        of the numerator of the exponential factorin the coordination FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.NN_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_R0_B = Quantity(
        type=str,
        shape=[],
        description='''
        For the CV given by the multiplication of two coorination numbers, specify the R0
        parameter in the second coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.R0_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.R0'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION(MSection):
    '''
    Section to define functions between two distances as collective variables. The
    function is defined as d1+coeff*d2
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points for the two bonds d1=(1-2) d2=(3-4).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_COEFFICIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coefficient in the function for the constraint. -1.0 has to be used
        for distance difference, 1.0 for distance addition
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.COEFFICIENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE(MSection):
    '''
    Section to define the distance of a point from a plane as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_ATOM_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the atom/point index defining the point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.ATOM_POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_ATOMS_PLANE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the plane.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.ATOMS_PLANE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE(MSection):
    '''
    Section to define the distance as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the distance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_AXIS = Quantity(
        type=str,
        shape=[],
        description='''
        Define the axes along which the colvar should be evaluated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.AXIS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS(MSection):
    '''
    Section to define the gyration radius as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points defyining the gyration radius variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_KINDS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms defining the gyration radius.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.KINDS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_NPOINTS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points in the path
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.NPOINTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.RCUT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_SHIFT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for shifting each term in the sum
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.SHIFT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM(MSection):
    '''
    Section to define the formation of a hydronium as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_HYDROGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.HYDROGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the LAMBDA parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the NH parameter in the hydronium function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.NH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_OXYGENS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.OXYGENS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_PNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.PNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_PNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.PNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_P = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.P'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_QNH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.QNH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_QNO = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.QNO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_Q = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.Q'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_ROH = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROH parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.ROH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_ROO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the ROO parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.ROO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION(MSection):
    '''
    Section to define the population of specie as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_KINDS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.KINDS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_KINDS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify alternatively kinds of atoms building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.KINDS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_N0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the n0 parameter that sets the coordination of the species.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.N0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_ND = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the denominator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.ND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_NN = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the value of the numerator of the exponential factorin the coordination
        FUNCTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.NN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_R0 = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the R0 parameter in the coordination function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.R0'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the gaussian width of used to build the population istogram.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.SIGMA'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM(MSection):
    '''
    Section to define the Q parameter (crystalline order parameter) as a collective
    variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the width of the Fermi-Dirac style smearing around RCUT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.ALPHA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_ATOMS_FROM = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.ATOMS_FROM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_ATOMS_TO = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms/points building the coordination variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.ATOMS_TO'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_L = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the L spherical harmonics from Ylm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the distance cutoff for neighbors.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING(MSection):
    '''
    Section to define general ring puckering collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the ring.At least 4 Atoms are
        needed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_COORDINATE = Quantity(
        type=str,
        shape=[],
        description='''
        Indicate the coordinate to be used. Follow the Cremer-Pople definition for a N
        ring.0 is the total puckering variable Q,2..[N/2] are puckering
        coordinates.-2..-[N/2-1] are puckering angles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.COORDINATE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME(MSection):
    '''
    Specify coordinates of the frame (number of frames can be either 1 or 2)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD(MSection):
    '''
    Section to define a CV as function of RMSD computed with respect to given reference
    configurations. For 2 configurations the colvar is equal to: ss = (RMSDA-
    RMSDB)/(RMSDA+RMSDB), while if only 1 configuration is given, then the colvar is just
    the RMSD from that frame.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify weights of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.WEIGHTS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD.FRAME'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION(MSection):
    '''
    Section to define the torsion as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the torsion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED(MSection):
    '''
    This section allows to use any function of the energy subsystems  in a mixed_env
    calculation as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.DX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_ENERGY_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the collective variable in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.ENERGY_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.UNITS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.VALUES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variables of the functional form. To allow an efficient mapping the
        order of the energy variables will be considered identical to the order of the
        force_eval in the force_eval_order list.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U(MSection):
    '''
    Section to define the energy as a generalized collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U.MIXED'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG(MSection):
    '''
    Section to define the distance of an atom from its starting position
    ((X-X(0))^2+(Y-Y(0))^2+(Z-Z(0))^2) or part of its components as a collective
    variable.If absolute_position is specified, instead the CV is represented by the
    instantaneous position of the atom (only available for X, Y or Z components).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_ABSOLUTE_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, the absolute position of the atoms will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.ABSOLUTE_POSITION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atom/point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.ATOM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_COMPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.COMPONENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG(MSection):
    '''
    Section to define the cross term (XA-XA(0))*(XB-XB(0))+(XA-XA(0))*(YB-YB(0)) or part
    of its components as a collective variable. The final term is given by the product  of
    the components of A with the components of B.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atoms/points A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_COMPONENT_A = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom A.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.COMPONENT_A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_COMPONENT_B = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.COMPONENT_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR(MSection):
    '''
    This section specifies the nature of the collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_ANGLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.ANGLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_BOND_ROTATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.BOND_ROTATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COLVAR_FUNC_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COLVAR_FUNC_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_CONDITIONED_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_COORDINATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.COORDINATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_FUNCTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE_POINT_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_GYRATION_RADIUS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.GYRATION_RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HBP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HBP'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_HYDRONIUM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.HYDRONIUM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_POPULATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.POPULATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_QPARM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.QPARM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RING_PUCKERING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RING_PUCKERING'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_RMSD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.RMSD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.TORSION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_U'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_WC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.WC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_DIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_DIAG'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR_XYZ_OUTERDIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR.XYZ_OUTERDIAG'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME(MSection):
    '''
    Specify coordinates of the frame
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP(MSection):
    '''
    Activating this print key will print once a file with the values of the FUNCTION on a
    grid of COLVAR values in a specified range. GRID_SPACING and RANGE for every COLVAR
    has to be specified again in the same order as they are in the input.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.FILENAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_GRID_SPACING = Quantity(
        type=str,
        shape=[],
        description='''
        Distance between two gridpoints for the grid on the COLVAR
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.GRID_SPACING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        The range of of the grid of the COLVAR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.RANGE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH(MSection):
    '''
    Section defining a one dimensional reaction path in an Q-dimensional space of colvars.
    Constraining this colvar, allows to sample the space orthogonal to the reaction path,
    both in the Q-dimensional colvar and 3N-Q remaining coordinates. For the details of
    the function see cited literature.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_DISTANCES_RMSD = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for DISTANCES_RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.DISTANCES_RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the ith element of the vector valued function that defines the reaction
        path. This keyword needs to repeat exactly Q times, and the order must match the
        order of the colvars. The VARIABLE (e.g. T) which parametrises the curve can be
        used as the target of a constraint.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the exponent of the Gaussian used in the integral representation of the
        colvar.The shape of the space orthogonal to the reaction path is defined by this
        choice. In the limit of large values, it is given by the plane orthogonal to the
        path.In practice, modest values are required for stable numerical integration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.LAMBDA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        The range of VARIABLE used for the parametrisation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.RANGE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_RMSD = Quantity(
        type=str,
        shape=[],
        description='''
        Settings for RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Step size in the numerical integration, a few thousand points are common, and the
        proper number also depends on LAMBDA.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.STEP_SIZE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_VARIABLE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the variable that parametrises the FUNCTION defining the
        reaction path.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.VARIABLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_COLVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.FRAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH_MAP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH.MAP'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING(MSection):
    '''
    Section to define general ring puckering collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the ring.At least 4 Atoms are
        needed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_COORDINATE = Quantity(
        type=str,
        shape=[],
        description='''
        Indicate the coordinate to be used. Follow the Cremer-Pople definition for a N
        ring.0 is the total puckering variable Q,2..[N/2] are puckering
        coordinates.-2..-[N/2-1] are puckering angles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.COORDINATE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME_COORD(MSection):
    '''
    The positions for RMSD used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME(MSection):
    '''
    Specify coordinates of the frame (number of frames can be either 1 or 2)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME.COORD_FILE_NAME'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME.COORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD(MSection):
    '''
    Section to define a CV as function of RMSD computed with respect to given reference
    configurations. For 2 configurations the colvar is equal to: ss = (RMSDA-
    RMSDB)/(RMSDA+RMSDB), while if only 1 configuration is given, then the colvar is just
    the RMSD from that frame.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Whether the reference frames should be aligned to minimize the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.ALIGN_FRAMES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify indexes of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_SUBSET_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Define the subsytem used to compute the RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.SUBSET_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify weights of atoms building the subset.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.WEIGHTS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD_FRAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD.FRAME'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION(MSection):
    '''
    Section to define the torsion as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the torsion.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED(MSection):
    '''
    This section allows to use any function of the energy subsystems  in a mixed_env
    calculation as a collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the derivative with the Ridders method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.DX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_ENERGY_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the functional form of the collective variable in mathematical notation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.ENERGY_FUNCTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_ERROR_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Checks that the error in computing the derivative is not larger than the value
        set. In case prints a warning message.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.ERROR_LIMIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the parameters of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_UNITS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally, allows to define valid CP2K unit strings for each parameter value. It
        is assumed that the corresponding parameter value is specified in this unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.UNITS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_VALUES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the values of parameter of the functional form
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.VALUES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the variables of the functional form. To allow an efficient mapping the
        order of the energy variables will be considered identical to the order of the
        force_eval in the force_eval_order list.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED.VARIABLES'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U(MSection):
    '''
    Section to define the energy as a generalized collective variable.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.U.MIXED'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC(MSection):
    '''
    Section to define the hbond wannier centre as a collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.WC'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms/points defining the bond (Od, H, Oa).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_WC_RCUT = Quantity(
        type=str,
        shape=[],
        description='''
        Parameter used for computing the cutoff radius for searching the wannier centres
        around an atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.WC.RCUT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.WC.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG(MSection):
    '''
    Section to define the distance of an atom from its starting position
    ((X-X(0))^2+(Y-Y(0))^2+(Z-Z(0))^2) or part of its components as a collective
    variable.If absolute_position is specified, instead the CV is represented by the
    instantaneous position of the atom (only available for X, Y or Z components).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_ABSOLUTE_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, the absolute position of the atoms will be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.ABSOLUTE_POSITION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atom/point.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.ATOM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_COMPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.COMPONENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT(MSection):
    '''
    Enables the possibility to use geometrical centers instead of single atoms to define
    colvars
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of atoms defining the geometrical center
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Chooses the type of geometrical point
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT.TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT_WEIGHTS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weights for a weighted geometrical center. Default is 1/natoms for
        every atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT.WEIGHTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT_XYZ = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the xyz of the fixed point (if the case)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT.XYZ'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG(MSection):
    '''
    Section to define the cross term (XA-XA(0))*(XB-XB(0))+(XA-XA(0))*(YB-YB(0)) or part
    of its components as a collective variable. The final term is given by the product  of
    the components of A with the components of B.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the atoms/points A and B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_COMPONENT_A = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom A.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.COMPONENT_A'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_COMPONENT_B = Quantity(
        type=str,
        shape=[],
        description='''
        Define the component of the position vector which will be used as a colvar for
        atom B.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.COMPONENT_B'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_PBC = Quantity(
        type=str,
        shape=[],
        description='''
        Whether periodic boundary conditions should be applied on the atomic position
        before computing the colvar or not.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.PBC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG_POINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG.POINT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR(MSection):
    '''
    This section specifies the nature of the collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE_PLANE_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE_PLANE_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_ANGLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.ANGLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_BOND_ROTATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.BOND_ROTATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COLVAR_FUNC_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COLVAR_FUNC_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COLVAR_FUNC_INFO'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COMBINE_COLVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COMBINE_COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_CONDITIONED_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.CONDITIONED_DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_COORDINATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.COORDINATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FROM_PATH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FROM_PATH'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_FUNCTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_FUNCTION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE_POINT_PLANE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE_POINT_PLANE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_DISTANCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.DISTANCE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_GYRATION_RADIUS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.GYRATION_RADIUS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HBP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HBP'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_HYDRONIUM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.HYDRONIUM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_POPULATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.POPULATION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_QPARM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.QPARM'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_REACTION_PATH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.REACTION_PATH'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RING_PUCKERING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RING_PUCKERING'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_RMSD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.RMSD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.TORSION'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_U'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_WC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.WC'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_DIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_DIAG'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR_XYZ_OUTERDIAG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR.XYZ_OUTERDIAG'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_COORD(MSection):
    '''
    The coordinates for simple systems (like the QM ones) xyz format by default. More
    complex systems should be given with an external pdb file.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The atomic coordinates in the format:<p><tt>ATOMIC_KIND  X Y Z
        MOLNAME</tt></p>The <tt>MOLNAME</tt> is optional. If not provided the molecule
        name is internally created. All other fields after <tt>MOLNAME</tt> are simply
        ignored.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COORD.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COORD_SCALED = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the coordinateds in input are scaled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COORD.SCALED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_COORD_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the coordinates in inputAll available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.COORD.UNIT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_COORD(MSection):
    '''
    The core coordinates for the shell-model potentials xyz format with an additional
    column for the index of the corresponding particle
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CORE_COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CORE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The core particle coordinates in the format:<p><tt>ATOMIC_KIND  X Y Z
        ATOMIC_INDEX</tt></p>The <tt>ATOMIC_INDEX</tt> refers to the atom the core
        particle belongs to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CORE_COORD.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CORE_COORD_SCALED = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the coordinateds in input are scaled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CORE_COORD.SCALED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CORE_COORD_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the coordinates in inputAll available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CORE_COORD.UNIT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_VELOCITY(MSection):
    '''
    The velocities of cores for shell-model potentials, in xyz format
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CORE_VELOCITY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_CORE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The core particle velocities in the format:<p><tt><big>v<sub>x</sub> v<sub>y</sub>
        v<sub>z</sub></big></tt></p>The same order as for the core particle coordinates is
        assumed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.CORE_VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BASIS(MSection):
    '''
    Section used to specify a general basis set for QM calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BASIS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BASIS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        <u>CP2K Basis Set Standard Format</u>

        <pre>

        Element symbol  Name of the basis set  Alias names

        nset (repeat the following block of lines nset times)

        n lmin lmax nexp nshell(lmin) nshell(lmin+1) ... nshell(lmax-1) nshell(lmax)

        a(1)      c(1,l,1)      c(1,l,2) ...      c(1,l,nshell(l)-1)
        c(1,l,nshell(l)), l=lmin,lmax

        a(2)      c(2,l,1)      c(2,l,2) ...      c(2,l,nshell(l)-1)
        c(2,l,nshell(l)), l=lmin,lmax

        .         .             .                 .                       .

        .         .             .                 .                       .

        .         .             .                 .                       .

        a(nexp-1) c(nexp-1,l,1) c(nexp-1,l,2) ... c(nexp-1,l,nshell(l)-1)
        c(nexp-1,l,nshell(l)), l=lmin,lmax

        a(nexp)   c(nexp,l,1)   c(nexp,l,2)   ... c(nexp,l,nshell(l)-1)
        c(nexp,l,nshell(l)), l=lmin,lmax

        nset     : Number of exponent sets

        n        : Principle quantum number (only for orbital label printing)

        lmax     : Maximum angular momentum quantum number l

        lmin     : Minimum angular momentum quantum number l

        nshell(l): Number of shells for angular momentum quantum number l

        a        : Exponent

        c        : Contraction coefficient

        </pre>

        Source:
        ftp://ftp.aip.org/epaps/journ_chem_phys/E-JCPSA6-127-308733/BASIS_MOLOPT_JCP.txt
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BASIS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA(MSection):
    '''
    alpha spin
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS.ALPHA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA_L = Quantity(
        type=str,
        shape=[],
        description='''
        Angular momentum quantum number of theorbitals whose occupation is changed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.ALPHA.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA_NEL = Quantity(
        type=str,
        shape=[],
        description='''
        Orbital ccupation change per angular momentum quantum number.In unrestricted
        calculations applied to spin alpha.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.ALPHA.NEL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA_N = Quantity(
        type=str,
        shape=[],
        description='''
        Principal quantum number of theorbitals whose occupation is changed. Default is
        the first not occupied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.ALPHA.N'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA(MSection):
    '''
    beta spin
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS.BETA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA_L = Quantity(
        type=str,
        shape=[],
        description='''
        Angular momentum quantum number of theorbitals of beta spin whose occupation is
        changed.Active only for unrestricted calculations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.BETA.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA_NEL = Quantity(
        type=str,
        shape=[],
        description='''
        Orbital ccupation change per angular momentum quantum number.Applied to spin beta
        and active only in unrestricted calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.BETA.NEL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA_N = Quantity(
        type=str,
        shape=[],
        description='''
        Principal quantum number of theorbitals of beta spin whose occupation is changed.
        Default is the first not occupied.Active only for unrestricted calculations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.BETA.N'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS(MSection):
    '''
    Define the required atomic orbital occupation assigned in initialization of the
    density matrix, by adding or subtracting electrons from specific angular momentum
    channels. It works only with GUESS ATOMIC.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the BS section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BS.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_ALPHA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS.ALPHA'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS_BETA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS.BETA'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION(MSection):
    '''
    Enforce and control a special (initial) orbital occupation. Note, this feature works
    only for the methods MULLIKEN and LOWDIN. It should only be used to prepare an initial
    configuration. An inadequate parameter choice can easily inhibit SCF convergence.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION_EPS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The occupation constraint is enforced until this threshold value for the SCF
        convergence criterion is reached
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION.EPS_SCF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION_MAX_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        The occupation constraint is applied for this number of initial SCF iterations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION.MAX_SCF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION_ORBITALS = Quantity(
        type=str,
        shape=[],
        description='''
        Select orbitals and occupation order. An input of 1 to 2*L+1 integer values in the
        range -L to L defining the M values of the spherical orbitals is expected.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION.ORBITALS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the ENFORCE_OCCUPATION section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION_SMEAR = Quantity(
        type=str,
        shape=[],
        description='''
        The occupation constraint is applied with smearing
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION.SMEAR'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U(MSection):
    '''
    Define the parameters for a DFT+U run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_EPS_U_RAMPING = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold value (SCF convergence) for incrementing the effective U value when U
        ramping is active.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.EPS_U_RAMPING'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_INIT_U_RAMPING_EACH_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Set the initial U ramping value to zero before each wavefunction optimisation. The
        default is to apply U ramping only for the initial wavefunction optimisation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.INIT_U_RAMPING_EACH_SCF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_L = Quantity(
        type=str,
        shape=[],
        description='''
        Angular momentum quantum number of theorbitals to which the correction is applied
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.L'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the DFT+U section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.SECTION_PARAMETERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_U_MINUS_J = Quantity(
        type=str,
        shape=[],
        description='''
        Effective parameter U(eff) = U - J
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.U_MINUS_J'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_U_RAMPING = Quantity(
        type=str,
        shape=[],
        description='''
        Increase the effective U parameter stepwise using the specified increment until
        the target value given by U_MINUS_J is reached.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.U_RAMPING'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U_ENFORCE_OCCUPATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U.ENFORCE_OCCUPATION'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_GEMINAL(MSection):
    '''
    Section used to specify a geminal basis set for QM calculations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.GEMINAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_GEMINAL_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K Basis Set Standard Format
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.GEMINAL.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_KG_POTENTIAL(MSection):
    '''
    Section used to specify KG Potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.KG_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_KG_POTENTIAL_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K KG TNADD Potential Standard Format (TNADD)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.KG_POTENTIAL.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_POTENTIAL(MSection):
    '''
    Section used to specify Potentials.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_POTENTIAL_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        CP2K Pseudo Potential Standard Format (GTH, ALL)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.POTENTIAL.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND(MSection):
    '''
    The description of the kind of the atoms (mostly for QM)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_ALPHA_SCP = Quantity(
        type=str,
        shape=[],
        description='''
        The polarizability for scalar-isotropic polarization using SCP with FIST as the
        driver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.ALPHA_SCP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_AUX_BASIS_FIT_NORMALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        The normalization of the basis set for auxiliary density matrix method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.AUX_BASIS_FIT_NORMALIZATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_AUX_BASIS_NORMALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        The normalization of the auxliliary basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.AUX_BASIS_NORMALIZATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_AUX_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The auxliliary basis set (GTO type)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.AUX_BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_AUX_FIT_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The auxliliary basis set (GTO type) for auxiliary density matrix method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.AUX_FIT_BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BASIS_NORMALIZATION = Quantity(
        type=str,
        shape=[],
        description='''
        The normalization of the auxliliary basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BASIS_NORMALIZATION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The primary Gaussian basis set (NONE implies no basis used, meaningful with GHOST)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_CORE_CORRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Corrects the effective nuclear charge
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.CORE_CORRECTION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_DFTB3_PARAM = Quantity(
        type=str,
        shape=[],
        description='''
        The third order parameter (derivative of hardness) used in diagonal DFTB3
        correction.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.DFTB3_PARAM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_ELEC_CONF = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the electronic configration used in construction the atomic initial
        guess (see the pseudo potential file for the default values.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.ELEC_CONF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_ELEMENT = Quantity(
        type=str,
        shape=[],
        description='''
        The element of the actual kind (if not given it is inferred from the kind name)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.ELEMENT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_GEMINAL_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The Geminal Gaussian basis set to be used in HF exchange fitting
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.GEMINAL_BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_GHOST = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword makes all atoms of this kind ghost atoms, i.e. without pseudo or
        nuclear charge.Useful to just have the basis set at that position (BSSE
        calculations),or to have a non-interacting particle with BASIS_SET NONE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.GHOST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_GPW_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Force one type to be treated by the GPW scheme, whatever are its primitives, even
        if the GAPW method is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.GPW_TYPE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_HARD_EXP_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        The region where the hard density is supposed to be confined(GAPW)(in Bohr,
        default is 1.2 for H and 1.512 otherwise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.HARD_EXP_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_I_SCP = Quantity(
        type=str,
        shape=[],
        description='''
        The dispersion parameter for scalar-isotropic polarization using SCP with FIST as
        the driver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.I_SCP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_KG_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the non-additive atomic kinetic energy potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.KG_POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_LEBEDEV_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points for the angular part of the local grid (GAPW)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.LEBEDEV_GRID'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_LRI_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The local resolution of identity basis set (GTO type)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.LRI_BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_MASS = Quantity(
        type=str,
        shape=[],
        description='''
        The mass of the atom (if negative or non present it is inferred from the element
        symbol)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.MASS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_MAX_RAD_LOCAL = Quantity(
        type=str,
        shape=[],
        description='''
        Max radius for the basis functions used to generate the local projectors in GAPW
        [Bohr]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.MAX_RAD_LOCAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_MM_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the radius of the electrostatic multipole of the atom in Fist. This radius
        applies to the charge, the dipole and the quadrupole. When zero, the atom is
        treated as a point multipole, otherwise it is treated as a Gaussian charge
        distribution with the given radius:
        p(x,y,z)*N*exp(-(x**2+y**2+z**2)/(2*MM_RADIUS**2)), where N is a normalization
        constant. In the core-shell model, only the shell is treated as a Gaussian and the
        core is always a point charge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.MM_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_NO_OPTIMIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Skip optimization of this type (used in specific basis set or potential
        optimization schemes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.NO_OPTIMIZE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_POTENTIAL = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the pseudopotential for the defined kind.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.POTENTIAL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_RADIAL_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        The number of points for the radial part of the local grid (GAPW)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.RADIAL_GRID'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_RHO0_EXP_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        the radius which defines the atomic region where the hard compensation density is
        confined.should be less than HARD_EXP_RADIUS (GAPW)(Bohr, default equals
        HARD_EXP_RADIUS)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.RHO0_EXP_RADIUS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_RI_AUX_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The RI auxliliary basis set used in WF_CORRELATION (GTO type)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.RI_AUX_BASIS_SET'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_SE_P_ORBITALS_ON_H = Quantity(
        type=str,
        shape=[],
        description='''
        Forces the usage of p-orbitals on H for SEMI-EMPIRICAL calculations.  This keyword
        applies only when the KIND is specifying an Hydrogen element. In all  other cases
        is simply ignored.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.SE_P_ORBITALS_ON_H'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the kind described in this section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.KIND.SECTION_PARAMETERS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BASIS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_BS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.BS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_DFT_PLUS_U'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.DFT_PLUS_U'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_GEMINAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_GEMINAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.GEMINAL'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_KG_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_KG_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.KG_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND.POTENTIAL'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_DIPOLES(MSection):
    '''
    Specifies the dipoles of the particles.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES.DIPOLES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_MULTIPOLES_DIPOLES_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The dipole components for each atom in the format:<p><tt><big>D<sub>x</sub>
        D<sub>y</sub> D<sub>z</sub></big></tt></p>
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.MULTIPOLES.DIPOLES.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_QUADRUPOLES(MSection):
    '''
    Specifies the quadrupoles of the particles.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES.QUADRUPOLES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_MULTIPOLES_QUADRUPOLES_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The quadrupole components for each atom in the format:<p><big><tt>Q<sub>xx</sub>
        Q<sub>xy</sub> Q<sub>xz</sub> Q<sub>yy</sub> Q<sub>yz</sub>
        Q<sub>zz</sub></big></tt></p>
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.MULTIPOLES.QUADRUPOLES.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES(MSection):
    '''
    Specifies the dipoles and quadrupoles for particles.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_DIPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_DIPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES.DIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_QUADRUPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES_QUADRUPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES.QUADRUPOLES'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.RNG_INIT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_COORD(MSection):
    '''
    The shell coordinates for the shell-model potentials xyz format with an additional
    column for the index of the corresponding particle
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.SHELL_COORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_SHELL_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The shell particle coordinates in the format:<p><tt>ATOMIC_KIND  X Y Z
        ATOMIC_INDEX</tt></p>The <tt>ATOMIC_INDEX</tt> refers to the atom the shell
        particle belongs to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.SHELL_COORD.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_SHELL_COORD_SCALED = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the coordinateds in input are scaled.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.SHELL_COORD.SCALED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_SHELL_COORD_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the coordinates in inputAll available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.SHELL_COORD.UNIT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_VELOCITY(MSection):
    '''
    The velocities of shells for shell-model potentials, in xyz format
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.SHELL_VELOCITY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_SHELL_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The shell particle velocities in the format:<p><tt><big>v<sub>x</sub>
        v<sub>y</sub> v<sub>z</sub></big></tt></p>The same order as for the shell particle
        coordinates is assumed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.SHELL_VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CENTER_COORDINATES(MSection):
    '''
    Allows centering the coordinates of the system in the box. The centering point can be
    defined by the user.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CENTER_COORDINATES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CENTER_COORDINATES_CENTER_POINT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the point used for centering the coordinates. Default is to center the
        system in cell/2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CENTER_COORDINATES.CENTER_POINT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CENTER_COORDINATES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the centering method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CENTER_COORDINATES.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB(MSection):
    '''
    controls the dumping of the PDB at the starting geometry
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_CHARGE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the BETA field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.CHARGE_BETA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_CHARGE_EXTENDED = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the very last field of the PDB file (starting from column
        81)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.CHARGE_EXTENDED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_CHARGE_OCCUP = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the OCCUP field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.CHARGE_OCCUP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.FILENAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF(MSection):
    '''
    controls the dumping of the PSF connectivity
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF.ADD_LAST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF.FILENAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF.LOG_PRINT_KEY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_EI_LIST(MSection):
    '''
    Speficy bonds (via atom kinds) for fine tuning of 1-2 exclusion lists. If this section
    is not present the 1-2 exclusion is applied to all bond kinds. When this section is
    present the 1-2 exclusion is applied ONLY to the bonds defined herein. This section
    allows ONLY fine tuning of 1-2 interactions.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_EI_LIST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_EI_LIST_BOND = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the atom kinds involved in the bond for which 1-2 exclusion holds.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_EI_LIST.BOND'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_VDW_LIST(MSection):
    '''
    Speficy bonds (via atom kinds) for fine tuning of 1-2 exclusion lists. If this section
    is not present the 1-2 exclusion is applied to all bond kinds. When this section is
    present the 1-2 exclusion is applied ONLY to the bonds defined herein. This section
    allows ONLY fine tuning of 1-2 interactions.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_VDW_LIST'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_VDW_LIST_BOND = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the atom kinds involved in the bond for which 1-2 exclusion holds.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_VDW_LIST.BOND'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ANGLE(MSection):
    '''
    Section used to add/remove angles in the connectivity. Useful for systems with a
    complex connectivity, difficult to find out automatically.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ANGLE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ANGLE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies two atomic index united by a covalent bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ANGLE.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ANGLE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ANGLE.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BOND(MSection):
    '''
    Section used to add/remove  bonds in the connectivity. Useful for systems with a
    complex connectivity, difficult to find out automatically.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BOND'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BOND_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies two atomic index united by a covalent bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BOND.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BOND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BOND.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_IMPROPER(MSection):
    '''
    Section used to add/remove improper in the connectivity. Useful for systems with a
    complex connectivity, difficult to find out automatically.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.IMPROPER'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_IMPROPER_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies two atomic index united by a covalent bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.IMPROPER.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_IMPROPER_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.IMPROPER.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ISOLATED_ATOMS(MSection):
    '''
    This section specifies the  atoms that one considers isolated. Useful when present
    ions in solution.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ISOLATED_ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ISOLATED_ATOMS_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atomic indexes of the isolated ion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ISOLATED_ATOMS.LIST'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS(MSection):
    '''
    This section specifies the input parameters for the construction of neighbor lists.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.NEIGHBOR_LISTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS_GEO_CHECK = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the check that two atoms are never below the minimum value
        used to construct the splines during the construction of the neighbouring list.
        Disabling this keyword avoids CP2K to abort in case two atoms are below the
        minimum  value of the radius used to generate the splines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.NEIGHBOR_LISTS.GEO_CHECK'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS_NEIGHBOR_LISTS_FROM_SCRATCH = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the building of the neighbouring list from scratch.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.NEIGHBOR_LISTS.NEIGHBOR_LISTS_FROM_SCRATCH'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS_VERLET_SKIN = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the Verlet Skin for the generation of the neighbor lists
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.NEIGHBOR_LISTS.VERLET_SKIN'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_TORSION(MSection):
    '''
    Section used to add/remove torsion in the connectivity. Useful for systems with a
    complex connectivity, difficult to find out automatically.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.TORSION'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_TORSION_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies two atomic index united by a covalent bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.TORSION.ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_TORSION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of the bond
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.TORSION.SECTION_PARAMETERS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE(MSection):
    '''
    Setup of keywords controlling the generation of the connectivity
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BONDLENGTH_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum distance to generate neighbor lists to build connectivity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BONDLENGTH_MAX'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BONDLENGTH_MIN = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum distance to generate neighbor lists to build connectivity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BONDLENGTH_MIN'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BONDPARM_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Used in conjunction with BONDPARM to help determine wheather there is bonding
        between two atoms based on a distance criteria.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BONDPARM_FACTOR'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BONDPARM = Quantity(
        type=str,
        shape=[],
        description='''
        Used in conjunction with BONDPARM_FACTOR to help determine wheather there is
        bonding between two atoms based on a distance criteria. Can use covalent radii
        information or VDW radii information
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BONDPARM'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_CREATE_MOLECULES = Quantity(
        type=str,
        shape=[],
        description='''
        Create molecules names and definition. Can be used to override the  molecules
        specifications of a possible input connectivity or to create molecules
        specifications for file types as XYZ, missing of molecules definitions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.CREATE_MOLECULES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_REORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Reorder a list of atomic coordinates into order so it can be packed correctly.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.REORDER'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ANGLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ANGLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ANGLE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BOND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_BOND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.BOND'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_IMPROPER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_IMPROPER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.IMPROPER'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ISOLATED_ATOMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_ISOLATED_ATOMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.ISOLATED_ATOMS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_NEIGHBOR_LISTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.NEIGHBOR_LISTS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_TORSION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE_TORSION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE.TORSION'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_ANGLES(MSection):
    '''
    Defines new angles
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.ANGLES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_ANGLES_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Three integer indexes per line defining the new angle Indexes must be relative to
        the full system and not to the single molecules
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.ANGLES.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_BONDS(MSection):
    '''
    Defines new bonds
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.BONDS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_BONDS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Two integer indexes per line defining the new bond. Indexes must be relative to
        the full system and not to the single molecules
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.BONDS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_IMPROPERS(MSection):
    '''
    Defines new impropers
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.IMPROPERS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_IMPROPERS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Four integer indexes per line defining the new improper Indexes must be relative
        to the full system and not to the single molecules
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.IMPROPERS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_TORSIONS(MSection):
    '''
    Defines new torsions
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.TORSIONS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_TORSIONS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Four integer indexes per line defining the new torsion Indexes must be relative to
        the full system and not to the single molecules
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.TORSIONS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES(MSection):
    '''
    Enables the creation of connecting bridges (bonds, angles, torsions, impropers)
    between the two or more molecules defined with independent connectivity.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_ANGLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_ANGLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.ANGLES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_BONDS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_BONDS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.BONDS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_IMPROPERS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_IMPROPERS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.IMPROPERS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_TORSIONS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES_TORSIONS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES.TORSIONS'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE(MSection):
    '''
    Specify information about the connectivity of single molecules
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MOLECULE'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE_CONN_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Ways to determine and generate a molecules. Default is to use GENERATE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MOLECULE.CONN_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE_CONN_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains the molecular connectivity.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MOLECULE.CONN_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE_NMOL = Quantity(
        type=str,
        shape=[],
        description='''
        number of molecules
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MOLECULE.NMOL'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET(MSection):
    '''
    Specify the connectivity of a full system specifying the connectivity of the fragments
    of the system.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MERGE_MOLECULES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MERGE_MOLECULES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET_MOLECULE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET.MOLECULE'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY(MSection):
    '''
    Section specifying information regarding how to handle the topology for classical
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_AUTOGEN_EXCLUDE_LISTS = Quantity(
        type=str,
        shape=[],
        description='''
        When True, the exclude lists are solely based on the bond data in the topology.
        The (minimal) number of bonds between two atoms is used to determine if the atom
        pair is added to an exclusion list. When False, 1-2 exclusion is based on bonds in
        the topology, 1-3 exclusion is based on bonds and bends in the topology, 1-4
        exclusion is based on bonds, bends and dihedrals in the topology. This implies
        that a missing dihedral in the topology will cause the corresponding 1-4 pair not
        to be in the exclusion list, in case 1-4 exclusion is requested for VDW or EI
        interactions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.AUTOGEN_EXCLUDE_LISTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CHARGE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Read MM charges from the BETA field of PDB file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CHARGE_BETA'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CHARGE_EXTENDED = Quantity(
        type=str,
        shape=[],
        description='''
        Read MM charges from the very last field of PDB file (starting from column 81). No
        limitations of number of digits.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CHARGE_EXTENDED'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CHARGE_OCCUP = Quantity(
        type=str,
        shape=[],
        description='''
        Read MM charges from the OCCUP field of PDB file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CHARGE_OCCUP'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CONN_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Ways to determine and generate a molecules. Default is to use GENERATE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CONN_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CONN_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains the molecular connectivity.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CONN_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_COORD_FILE_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Set up the way in which coordinates will be read.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.COORD_FILE_FORMAT'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the filename that contains coordinates.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.COORD_FILE_NAME'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DISABLE_EXCLUSION_LISTS = Quantity(
        type=str,
        shape=[],
        description='''
        Do not build any exclusion lists.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DISABLE_EXCLUSION_LISTS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_EI = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies which kind of Electrostatic interaction to skip.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_EI'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_VDW = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies which kind of Van der Waals interaction to skip.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_VDW'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MEMORY_PROGRESSION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword is quite technical and should normally not be changed by the user. It
        affects the memory allocation during the construction of the topology. It does NOT
        affect the memory used once the topology is built.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MEMORY_PROGRESSION_FACTOR'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_CHECK = Quantity(
        type=str,
        shape=[],
        description='''
        Check molecules have the same number of atom and names.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_CHECK'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MULTIPLE_UNIT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the numbers of repetition in space (X, Y, Z) of the defined cell,
        assuming it as a unit cell. This keyword affects only the coordinates
        specification. The same keyword in SUBSYS%CELL%MULTIPLE_UNIT_CELL should be
        modified in order to affect the cell specification.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MULTIPLE_UNIT_CELL'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_NUMBER_OF_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Optionally define the number of atoms read from an external file (see
        COORD_FILE_NAME) if the COORD_FILE_FORMAT CP2K is used
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.NUMBER_OF_ATOMS'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_PARA_RES = Quantity(
        type=str,
        shape=[],
        description='''
        For a protein, each residue is now considered a molecule
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.PARA_RES'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_TOPOLOGY_USE_G96_VELOCITY = Quantity(
        type=str,
        shape=[],
        description='''
        Use the velocities in the G96 coordinate files as the starting velocity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.TOPOLOGY.USE_G96_VELOCITY'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CENTER_COORDINATES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_CENTER_COORDINATES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.CENTER_COORDINATES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PDB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PDB'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_DUMP_PSF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.DUMP_PSF'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_EI_LIST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_EI_LIST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_EI_LIST'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_VDW_LIST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_EXCLUDE_VDW_LIST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.EXCLUDE_VDW_LIST'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_GENERATE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.GENERATE'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY_MOL_SET'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY.MOL_SET'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS_VELOCITY(MSection):
    '''
    The velocities for simple systems or the centroid mode in PI runs, xyz format by
    default
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.VELOCITY'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The atomic velocities in the format:<p><tt><big>v<sub>x</sub> v<sub>y</sub>
        v<sub>z</sub></big></tt></p>The same order as for the atomic coordinates is
        assumed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.VELOCITY.DEFAULT_KEYWORD'))

    x_cp2k_input_FORCE_EVAL_SUBSYS_VELOCITY_PINT_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the units of measurement for the velocities (currently works only for the
        path integral code). All available CP2K units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.SUBSYS.VELOCITY.PINT_UNIT'))


class x_cp2k_section_input_FORCE_EVAL_SUBSYS(MSection):
    '''
    a subsystem: coordinates, topology, molecules and cell
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_CELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CELL'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COLVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COLVAR'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.COORD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CORE_COORD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_CORE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.CORE_VELOCITY'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.KIND'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_MULTIPOLES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.MULTIPOLES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.RNG_INIT'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.SHELL_COORD'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_SHELL_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.SHELL_VELOCITY'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_TOPOLOGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.TOPOLOGY'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS.VELOCITY'))


class x_cp2k_section_input_FORCE_EVAL(MSection):
    '''
    parameters needed to calculate energy and forces and describe the system you want to
    analyze.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL'))

    x_cp2k_input_FORCE_EVAL_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Which method should be used to compute forces
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.METHOD'))

    x_cp2k_input_FORCE_EVAL_STRESS_TENSOR = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the calculation of the stress tensor. The combinations defined below are
        not implemented for all methods.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_FORCE_EVAL.STRESS_TENSOR'))

    x_cp2k_section_input_FORCE_EVAL_BSSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_BSSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.BSSE'))

    x_cp2k_section_input_FORCE_EVAL_DFT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_DFT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.DFT'))

    x_cp2k_section_input_FORCE_EVAL_EIP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_EIP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EIP'))

    x_cp2k_section_input_FORCE_EVAL_EP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_EP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EP'))

    x_cp2k_section_input_FORCE_EVAL_EXTERNAL_POTENTIAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_EXTERNAL_POTENTIAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.EXTERNAL_POTENTIAL'))

    x_cp2k_section_input_FORCE_EVAL_MIXED = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MIXED'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MIXED'))

    x_cp2k_section_input_FORCE_EVAL_MM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_MM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.MM'))

    x_cp2k_section_input_FORCE_EVAL_PRINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PRINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PRINT'))

    x_cp2k_section_input_FORCE_EVAL_PROPERTIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_PROPERTIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.PROPERTIES'))

    x_cp2k_section_input_FORCE_EVAL_QMMM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_QMMM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.QMMM'))

    x_cp2k_section_input_FORCE_EVAL_RESCALE_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_RESCALE_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.RESCALE_FORCES'))

    x_cp2k_section_input_FORCE_EVAL_SUBSYS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL_SUBSYS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL.SUBSYS'))


class x_cp2k_section_input_GLOBAL_DBCSR_ACC(MSection):
    '''
    Configuration options for the ACC-Driver.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.DBCSR.ACC'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_AVOID_AFTER_BUSY = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, stacks are not processed by the acc-driver after it has signaled
        congestion during a round of flushing. For the next round of flusing the driver is
        used again.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.AVOID_AFTER_BUSY'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_BINNING_BINSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Size of bins used when ordering the stacks with the binning-scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.BINNING_BINSIZE'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_BINNING_NBINS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins used when ordering the stacks with the binning-scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.BINNING_NBINS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_MIN_FLOP_PROCESS = Quantity(
        type=str,
        shape=[],
        description='''
        Only process stacks with more than the given number of floating-point operations
        per stack-entry (2*m*n*k).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.MIN_FLOP_PROCESS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_MIN_FLOP_SORT = Quantity(
        type=str,
        shape=[],
        description='''
        Only sort stacks with more than the given number of floating-point operations per
        stack-entry (2*m*n*k). Alternatively, the stacks are roughly ordered through a
        binning-scheme by Peter Messmer.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.MIN_FLOP_SORT'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_POSTERIOR_BUFFERS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of transfer-buffers associated with low priority streams.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.POSTERIOR_BUFFERS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_POSTERIOR_STREAMS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of acc streams created with low priority.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.POSTERIOR_STREAMS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_PRIORITY_BUFFERS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of transfer-buffers associated with high priority streams.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.PRIORITY_BUFFERS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_PRIORITY_STREAMS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of acc streams created with high priority.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.PRIORITY_STREAMS'))

    x_cp2k_input_GLOBAL_DBCSR_ACC_PROCESS_INHOMOGENOUS = Quantity(
        type=str,
        shape=[],
        description='''
        If enabled, inhomogenous stacks are also processed by the acc driver.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.ACC.PROCESS_INHOMOGENOUS'))


class x_cp2k_section_input_GLOBAL_DBCSR(MSection):
    '''
    Configuration options for the DBCSR library.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.DBCSR'))

    x_cp2k_input_GLOBAL_DBCSR_COMBINED_TYPES = Quantity(
        type=str,
        shape=[],
        description='''
        Combine matrix index and data into a single MPI derived data type for
        communication (avoid using).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.COMBINED_TYPES'))

    x_cp2k_input_GLOBAL_DBCSR_COMM_THREAD_LOAD = Quantity(
        type=str,
        shape=[],
        description='''
        If a communications thread is used, specify how much multiplication workload (%)
        the thread should perform in addition to communication tasks. A negative value
        leaves the decision up to DBCSR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.COMM_THREAD_LOAD'))

    x_cp2k_input_GLOBAL_DBCSR_MAX_ELEMENTS_PER_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Default block size for turning dense matrices in blocked ones
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.MAX_ELEMENTS_PER_BLOCK'))

    x_cp2k_input_GLOBAL_DBCSR_MM_DRIVER = Quantity(
        type=str,
        shape=[],
        description='''
        Select which routines to use for matrix block multiplications.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.MM_DRIVER'))

    x_cp2k_input_GLOBAL_DBCSR_MM_STACK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Size of multiplication parameter stack. A negative value leaves the decision up to
        DBCSR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.MM_STACK_SIZE'))

    x_cp2k_input_GLOBAL_DBCSR_MULTREC_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Recursion limit of cache oblivious multrec algorithm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.MULTREC_LIMIT'))

    x_cp2k_input_GLOBAL_DBCSR_N_SIZE_MNK_STACKS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of stacks to use for distinct atomic sizes (e.g., 2 for a system of mostly
        waters). A negative value leaves the decision up to DBCSR.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.N_SIZE_MNK_STACKS'))

    x_cp2k_input_GLOBAL_DBCSR_SUBCOMMUNICATORS = Quantity(
        type=str,
        shape=[],
        description='''
        Use MPI subcommunicators for transfers that are limited to process grid rows and
        columns.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.SUBCOMMUNICATORS'))

    x_cp2k_input_GLOBAL_DBCSR_USE_COMM_THREAD = Quantity(
        type=str,
        shape=[],
        description='''
        During multiplication, use a thread to periodically poll MPI to progress
        outstanding message completions.  This is beneficial on systems without a DMA-
        capable network adapter e.g. Cray XE6.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.USE_COMM_THREAD'))

    x_cp2k_input_GLOBAL_DBCSR_USE_MPI_ALLOCATION = Quantity(
        type=str,
        shape=[],
        description='''
        Allow use of MPI-allocated memory for potentially faster network communication.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.DBCSR.USE_MPI_ALLOCATION'))

    x_cp2k_section_input_GLOBAL_DBCSR_ACC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_DBCSR_ACC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.DBCSR.ACC'))


class x_cp2k_section_input_GLOBAL_FM(MSection):
    '''
    Configuration options for the full matrices.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.FM'))

    x_cp2k_input_GLOBAL_FM_FORCE_BLOCK_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Ensure for small matrices that the layout is compatible with bigger ones, i.e. no
        subdivision is performed (can break LAPACK!!!).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FM.FORCE_BLOCK_SIZE'))

    x_cp2k_input_GLOBAL_FM_NCOL_BLOCKS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the number of columns per scalapack block in the creation of vlock cyclic
        dense matrices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FM.NCOL_BLOCKS'))

    x_cp2k_input_GLOBAL_FM_NROW_BLOCKS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the number of rows per scalapack block in the creation of block cyclic
        dense matrices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FM.NROW_BLOCKS'))

    x_cp2k_input_GLOBAL_FM_TYPE_OF_MATRIX_MULTIPLICATION = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to switch between scalapack pdgemm and dbcsr_multiply. On normal systems
        pdgemm is recommended on system with GPU is optimized and can give better
        performance. NOTE: if DBCSR is employed FORCE_BLOCK_SIZE should be set. The
        perfomance on GPU's dependes crucially on the BLOCK_SIZES. Make sure optimized
        kernels are available.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FM.TYPE_OF_MATRIX_MULTIPLICATION'))


class x_cp2k_section_input_GLOBAL_MACHINE_ARCH(MSection):
    '''
    Configuration options for the machine architecture.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.MACHINE_ARCH'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_MEM_POL = Quantity(
        type=str,
        shape=[],
        description='''
        Enable memory binding on the compute node.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.MEM_POL'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        The memory banks ID for each MPI process. It will beuse to set memory bank of the
        MPI process
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.MEMORY'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_MPI_REORDERING = Quantity(
        type=str,
        shape=[],
        description='''
        Apply a global MPI reordering for the run
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.MPI_REORDERING'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_BRANCH = Quantity(
        type=str,
        shape=[],
        description='''
        Print machine architecture component organization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_BRANCH'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_FULL = Quantity(
        type=str,
        shape=[],
        description='''
        Print full machine architecture
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_FULL'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_PROC = Quantity(
        type=str,
        shape=[],
        description='''
        Print the process binding in the machine.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_PROC'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_RESUME = Quantity(
        type=str,
        shape=[],
        description='''
        Print the compute node architecture number of components.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_RESUME'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_THREAD_CUR = Quantity(
        type=str,
        shape=[],
        description='''
        Print the current threads binding in the machine.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_THREAD_CUR'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PRINT_THREAD = Quantity(
        type=str,
        shape=[],
        description='''
        Print the threads binding in the machine.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PRINT_THREAD'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_PROCESS = Quantity(
        type=str,
        shape=[],
        description='''
        Core ID for each MPI process of a compute node. It will be used to place the MPI
        process.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.PROCESS'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_SCHED_MPI = Quantity(
        type=str,
        shape=[],
        description='''
        Enable process scheduling on the compute node.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.SCHED_MPI'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_SCHED_THREAD = Quantity(
        type=str,
        shape=[],
        description='''
        Enable thread scheduling on the compute node.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.SCHED_THREAD'))

    x_cp2k_input_GLOBAL_MACHINE_ARCH_THREAD = Quantity(
        type=str,
        shape=[],
        description='''
        Core ID for each thread of a compute node. It will be used to place the thread.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.MACHINE_ARCH.THREAD'))


class x_cp2k_section_input_GLOBAL_PROGRAM_RUN_INFO(MSection):
    '''
    controls the printing of  initialization controlled by the global section
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.PROGRAM_RUN_INFO'))

    x_cp2k_input_GLOBAL_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_GLOBAL_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_GLOBAL_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_GLOBAL_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_GLOBAL_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_GLOBAL_REFERENCES(MSection):
    '''
    Controls the printing of the references relevant to the calculations performed
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.REFERENCES'))

    x_cp2k_input_GLOBAL_REFERENCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.REFERENCES.ADD_LAST'))

    x_cp2k_input_GLOBAL_REFERENCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.REFERENCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_GLOBAL_REFERENCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.REFERENCES.FILENAME'))

    x_cp2k_input_GLOBAL_REFERENCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.REFERENCES.LOG_PRINT_KEY'))

    x_cp2k_input_GLOBAL_REFERENCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.REFERENCES.SECTION_PARAMETERS'))


class x_cp2k_section_input_GLOBAL_TIMINGS(MSection):
    '''
    Controls the printing of the timing report at the end of CP2K execution
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.TIMINGS'))

    x_cp2k_input_GLOBAL_TIMINGS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.ADD_LAST'))

    x_cp2k_input_GLOBAL_TIMINGS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_GLOBAL_TIMINGS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.FILENAME'))

    x_cp2k_input_GLOBAL_TIMINGS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.LOG_PRINT_KEY'))

    x_cp2k_input_GLOBAL_TIMINGS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.SECTION_PARAMETERS'))

    x_cp2k_input_GLOBAL_TIMINGS_SORT_BY_SELF_TIME = Quantity(
        type=str,
        shape=[],
        description='''
        Sort the final timing report by the average self (exclusive) time instead of the
        total (inclusive) time of a routine
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.SORT_BY_SELF_TIME'))

    x_cp2k_input_GLOBAL_TIMINGS_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify % of CPUTIME above which the contribution will be inserted in the final
        timing report (e.g. 0.02 = 2%)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TIMINGS.THRESHOLD'))


class x_cp2k_section_input_GLOBAL(MSection):
    '''
    Section with general information regarding which kind of simulation to perform an
    parameters for the whole PROGRAM
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL'))

    x_cp2k_input_GLOBAL_ALLTOALL_SGL = Quantity(
        type=str,
        shape=[],
        description='''
        All-to-all communication (FFT) should use single precision
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.ALLTOALL_SGL'))

    x_cp2k_input_GLOBAL_BLACS_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        how to distribute the processors on the 2d grid needed by BLACS (and thus
        SCALAPACK)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.BLACS_GRID'))

    x_cp2k_input_GLOBAL_BLACS_REPEATABLE = Quantity(
        type=str,
        shape=[],
        description='''
        Use a topology for BLACS collectives that is guaranteed to be repeatable on
        homegeneous architectures
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.BLACS_REPEATABLE'))

    x_cp2k_input_GLOBAL_CALLGRAPH_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the callgraph file, which is writte a the end of the run. If not specified
        the project name will be used as filename.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.CALLGRAPH_FILE_NAME'))

    x_cp2k_input_GLOBAL_CALLGRAPH = Quantity(
        type=str,
        shape=[],
        description='''
        At the end of the run write a callgraph to file, which contains detailed timing
        informations. This callgraph can be viewed e.g. with the open-source program
        kcachegrind.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.CALLGRAPH'))

    x_cp2k_input_GLOBAL_ECHO_ALL_HOSTS = Quantity(
        type=str,
        shape=[],
        description='''
        Echo a list of hostname and pid for all MPI processes.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.ECHO_ALL_HOSTS'))

    x_cp2k_input_GLOBAL_ECHO_INPUT = Quantity(
        type=str,
        shape=[],
        description='''
        If the input should be echoed to the output with all the defaults made explicit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.ECHO_INPUT'))

    x_cp2k_input_GLOBAL_ENABLE_UNSUPPORTED_FEATURES = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the usage of unsupported features in a release version. It
        affects ONLY release versions of CP2K (no effects on development versions).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.ENABLE_UNSUPPORTED_FEATURES'))

    x_cp2k_input_GLOBAL_EXTENDED_FFT_LENGTHS = Quantity(
        type=str,
        shape=[],
        description='''
        Use fft library specific values for the allows number of points in FFTs. The
        default is to use the internal FFT lengths. For external fft libraries this may
        create an error at the external library level, because the length provided by cp2k
        is not supported by the external library. In this case switch on this keyword to
        obtain, with certain fft libraries, lengths matching the external fft library
        lengths, or larger allowed grids, or grids that more precisely match a given
        cutoff. IMPORTANT NOTE: in this case, the actual grids used in CP2K depends on the
        FFT library. A change of FFT library must therefore be considered equivalent to a
        change of basis, which implies a change of total energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.EXTENDED_FFT_LENGTHS'))

    x_cp2k_input_GLOBAL_FFT_POOL_SCRATCH_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Limits the memory usage of the FFT scratch pool, potentially reducing efficiency a
        bit
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FFT_POOL_SCRATCH_LIMIT'))

    x_cp2k_input_GLOBAL_FFTW_PLAN_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        FFTW can have improved performance if it is allowed to plan with explicit
        measurements which strategy is best for a given FFT. While a plan based on
        measurements is generally faster, differences in machine load will lead to
        different plans for the same input file, and thus numerics for the FFTs will be
        slightly different from run to run.PATIENT planning is recommended for long ab
        initio MD runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FFTW_PLAN_TYPE'))

    x_cp2k_input_GLOBAL_FFTW_WISDOM_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the file that contains wisdom (pre-planned FFTs) for use with FFTW3.
        Using wisdom can significantly speed up the FFTs (see the FFTW homepage for
        details). Note that wisdom is not transferable between different computer
        (architectures). Wisdom can be generated using the fftw-wisdom tool that is part
        of the fftw installation. cp2k/tools/cp2k-wisdom is a script that contains some
        additional info, and can help to generate a useful default for /etc/fftw/wisdom or
        particular values for a given simulation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FFTW_WISDOM_FILE_NAME'))

    x_cp2k_input_GLOBAL_FLUSH_SHOULD_FLUSH = Quantity(
        type=str,
        shape=[],
        description='''
        Flush output regularly, enabling this option might degrade performance
        significantly on certain machines.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.FLUSH_SHOULD_FLUSH'))

    x_cp2k_input_GLOBAL_OUTPUT_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the output file. Relevant only if automatically started (through farming
        for example). If empty uses the project name as basis for it.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.OUTPUT_FILE_NAME'))

    x_cp2k_input_GLOBAL_PREFERRED_DIAG_LIBRARY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the DIAGONALIZATION library. If not availabe ....
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PREFERRED_DIAG_LIBRARY'))

    x_cp2k_input_GLOBAL_PREFERRED_FFT_LIBRARY = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the FFT library which should be preferred. If it is not available, use
        FFTW3 if this is linked in, if FFTW3 is not available use FFTSG. Improved
        performance with FFTW3 can be obtained specifying a proper value for
        FFTW_PLAN_TYPE. Contrary to earlier CP2K versions, all libraries will result in
        the same grids, i.e. the subset of grids which all FFT libraries can transform.
        See EXTENDED_FFT_LENGTHS if larger FFTs or grids that more precisely match a given
        cutoff are needed, or older results need to be reproduced. FFTW3 is often (close
        to) optimal, and well tested with CP2K.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PREFERRED_FFT_LIBRARY'))

    x_cp2k_input_GLOBAL_PRINT_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        How much output is written out.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PRINT_LEVEL'))

    x_cp2k_input_GLOBAL_PROGRAM_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Which program should be run
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROGRAM_NAME'))

    x_cp2k_input_GLOBAL_PROJECT_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the project (used to build the name of the trajectory, and other files
        generated by the program)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.PROJECT_NAME'))

    x_cp2k_input_GLOBAL_RUN_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Type of run that you want to perform Geometry optimization, md, montecarlo,...
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.RUN_TYPE'))

    x_cp2k_input_GLOBAL_SAVE_MEM = Quantity(
        type=str,
        shape=[],
        description='''
        Some sections of the input structure are deallocated when not needed, and
        reallocated only when used. This reduces the required maximum memory
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.SAVE_MEM'))

    x_cp2k_input_GLOBAL_SEED = Quantity(
        type=str,
        shape=[],
        description='''
        Initial seed for the global (pseudo)random number generator to create a stream of
        normally Gaussian distributed random numbers.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.SEED'))

    x_cp2k_input_GLOBAL_TRACE_MASTER = Quantity(
        type=str,
        shape=[],
        description='''
        For parallel TRACEd runs: only the master node writes output.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TRACE_MASTER'))

    x_cp2k_input_GLOBAL_TRACE_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Limit the total number a given subroutine is printed in the trace. Accounting is
        not influenced.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TRACE_MAX'))

    x_cp2k_input_GLOBAL_TRACE_ROUTINES = Quantity(
        type=str,
        shape=[],
        description='''
        A list of routines to trace. If left empty all routines are traced. Accounting is
        not influenced.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TRACE_ROUTINES'))

    x_cp2k_input_GLOBAL_TRACE = Quantity(
        type=str,
        shape=[],
        description='''
        If a debug trace of the execution of the program should be written
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.TRACE'))

    x_cp2k_input_GLOBAL_WALLTIME = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum execution time for this run. Time in seconds or in HH:MM:SS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_GLOBAL.WALLTIME'))

    x_cp2k_section_input_GLOBAL_DBCSR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_DBCSR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.DBCSR'))

    x_cp2k_section_input_GLOBAL_FM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_FM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.FM'))

    x_cp2k_section_input_GLOBAL_MACHINE_ARCH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_MACHINE_ARCH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.MACHINE_ARCH'))

    x_cp2k_section_input_GLOBAL_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_GLOBAL_REFERENCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_REFERENCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.REFERENCES'))

    x_cp2k_section_input_GLOBAL_TIMINGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL_TIMINGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL.TIMINGS'))


class x_cp2k_section_input_MOTION_BAND_BANNER(MSection):
    '''
    Controls the printing of the BAND banner
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.BANNER'))

    x_cp2k_input_MOTION_BAND_BANNER_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BANNER.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_BANNER_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BANNER.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_BANNER_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BANNER.FILENAME'))

    x_cp2k_input_MOTION_BAND_BANNER_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BANNER.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_BANNER_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BANNER.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_CI_NEB(MSection):
    '''
    Controls parameters for CI-NEB type calculation only.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CI_NEB'))

    x_cp2k_input_MOTION_BAND_CI_NEB_NSTEPS_IT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of steps of IT-NEB to perform before switching on the CI
        algorithm
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CI_NEB.NSTEPS_IT'))


class x_cp2k_section_input_MOTION_BAND_CONVERGENCE_CONTROL(MSection):
    '''
    Setup parameters to control the convergence criteria for BAND
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CONVERGENCE_CONTROL'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_CONTROL_MAX_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance on the maximum value of the displacement on the BAND.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_CONTROL.MAX_DR'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_CONTROL_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance on the maximum value of Forces on the BAND.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_CONTROL.MAX_FORCE'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_CONTROL_RMS_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance on RMS displacements on the BAND.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_CONTROL.RMS_DR'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_CONTROL_RMS_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance on RMS Forces on the BAND.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_CONTROL.RMS_FORCE'))


class x_cp2k_section_input_MOTION_BAND_CONVERGENCE_INFO(MSection):
    '''
    Controls the printing of the convergence criteria during a BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CONVERGENCE_INFO'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_INFO.FILENAME'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_CONVERGENCE_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.CONVERGENCE_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_ENERGY(MSection):
    '''
    Controls the printing of the ENER file in a BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.ENERGY'))

    x_cp2k_input_MOTION_BAND_ENERGY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ENERGY.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_ENERGY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ENERGY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_ENERGY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ENERGY.FILENAME'))

    x_cp2k_input_MOTION_BAND_ENERGY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ENERGY.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_ENERGY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ENERGY.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO(MSection):
    '''
    Controls the printing of diis info during a BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO.FILENAME'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS(MSection):
    '''
    Activate the DIIS based optimization procedure for BAND
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.DIIS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_CHECK_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Performes a series of checks on the DIIS solution in order to accept the DIIS
        step. If set to .FALSE. the only check performed is that the angle between the
        DIIS solution and the reference vector is less than Pi/2. Can be useful if many
        DIIS steps are rejected.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.CHECK_DIIS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_MAX_SD_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of SD steps to perform before switching on DIIS (the
        minimum number will always be equal to N_DIIS).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.MAX_SD_STEPS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_MAX_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum stepsize used for the line search, sometimes this parametercan be reduced
        to stablize the LS for particularly difficult initial geometries
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.MAX_STEPSIZE'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_MAX_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.MAX_STEPS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_N_DIIS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of history vectors to be used with DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.N_DIIS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_NO_LS = Quantity(
        type=str,
        shape=[],
        description='''
        Does not perform LS during SD. Useful in combination with a proper STEPSIZE for
        particularly out of equilibrium starting geometries.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.NO_LS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_NP_LS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of points used in the line search SD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.NP_LS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_STEPSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial stepsize used for the line search, sometimes this parametercan be reduced
        to stablize DIIS
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.STEPSIZE'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS_DIIS_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.DIIS.DIIS_INFO'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL(MSection):
    '''
    Setup parameters to control the temperature during a BAND MD run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMP_CONTROL'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL_TEMP_TOL_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of steps to apply a temperature control
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMP_CONTROL.TEMP_TOL_STEPS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the tolerance on the temperature for rescaling
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMP_CONTROL.TEMP_TOL'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the target temperature
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMP_CONTROL.TEMPERATURE'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL(MSection):
    '''
    Setup parameters to control the velocity during a BAND MD run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD.VEL_CONTROL'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL_ANNEALING = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the annealing coefficient
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.VEL_CONTROL.ANNEALING'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL_PROJ_VELOCITY_VERLET = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a Projected Velocity Verlet instead of a normal Velocity Verlet. Every time
        the cosine between velocities and forces is < 0 velocities are zeroed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.VEL_CONTROL.PROJ_VELOCITY_VERLET'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL_SD_LIKE = Quantity(
        type=str,
        shape=[],
        description='''
        Zeros velocity at each MD step emulating a steepest descent like(SD_LIKE) approach
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.VEL_CONTROL.SD_LIKE'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD(MSection):
    '''
    Activate the MD based optimization procedure for BAND
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_MAX_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum number of MD steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.MAX_STEPS'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the initial temperature
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMPERATURE'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_MD_TIMESTEP = Quantity(
        type=str,
        shape=[],
        description='''
        The length of an integration step
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.MD.TIMESTEP'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_TEMP_CONTROL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD.TEMP_CONTROL'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD_VEL_CONTROL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD.VEL_CONTROL'))


class x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND(MSection):
    '''
    Specify the optimization method for the band
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_OPT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type optimizer used for the band
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.OPT_TYPE'))

    x_cp2k_input_MOTION_BAND_OPTIMIZE_BAND_OPTIMIZE_END_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Performs also an optimization of the end points of the band.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.OPTIMIZE_BAND.OPTIMIZE_END_POINTS'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_DIIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.DIIS'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND_MD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND.MD'))


class x_cp2k_section_input_MOTION_BAND_PROGRAM_RUN_INFO(MSection):
    '''
    Controls the printing basic info about the BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.PROGRAM_RUN_INFO'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_INITIAL_CONFIGURATION_INFO = Quantity(
        type=str,
        shape=[],
        description='''
        Print information for the setup of the initial configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.INITIAL_CONFIGURATION_INFO'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_REPLICA_COORD(MSection):
    '''
    The positions for BAND used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA.COORD'))

    x_cp2k_input_MOTION_BAND_REPLICA_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_BAND_REPLICA_VELOCITY(MSection):
    '''
    The velocities for BAND used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA.VELOCITY'))

    x_cp2k_input_MOTION_BAND_REPLICA_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_BAND_REPLICA_INFO(MSection):
    '''
    Controls the printing of each replica info during a BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA_INFO'))

    x_cp2k_input_MOTION_BAND_REPLICA_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_BAND_REPLICA_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_BAND_REPLICA_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA_INFO.FILENAME'))

    x_cp2k_input_MOTION_BAND_REPLICA_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_BAND_REPLICA_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_BAND_REPLICA(MSection):
    '''
    Specify coordinates and velocities (possibly) of the replica
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA'))

    x_cp2k_input_MOTION_BAND_REPLICA_COLLECTIVE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the value of the collective variables used in the projected BAND method.
        The order of the values is the order of the COLLECTIVE section in the
        constraints/restraints section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA.COLLECTIVE'))

    x_cp2k_input_MOTION_BAND_REPLICA_COORD_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the xyz file with coordinates (alternative to &COORD section)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.REPLICA.COORD_FILE_NAME'))

    x_cp2k_section_input_MOTION_BAND_REPLICA_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_REPLICA_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA.COORD'))

    x_cp2k_section_input_MOTION_BAND_REPLICA_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_REPLICA_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA.VELOCITY'))


class x_cp2k_section_input_MOTION_BAND_STRING_METHOD(MSection):
    '''
    Controls parameters for String Method type calculation only.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.STRING_METHOD'))

    x_cp2k_input_MOTION_BAND_STRING_METHOD_SMOOTHING = Quantity(
        type=str,
        shape=[],
        description='''
        Smoothing parameter for the reparametrization of the frames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.STRING_METHOD.SMOOTHING'))

    x_cp2k_input_MOTION_BAND_STRING_METHOD_SPLINE_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the oder of the spline used in the String Method.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.STRING_METHOD.SPLINE_ORDER'))


class x_cp2k_section_input_MOTION_BAND(MSection):
    '''
    The section that controls a BAND run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND'))

    x_cp2k_input_MOTION_BAND_ALIGN_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Enables the alignment of the frames at the beginning of a BAND calculation. This
        keyword does not affect the rotation of the replicas during a BAND calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ALIGN_FRAMES'))

    x_cp2k_input_MOTION_BAND_BAND_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of BAND calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.BAND_TYPE'))

    x_cp2k_input_MOTION_BAND_K_SPRING = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the spring constant
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.K_SPRING'))

    x_cp2k_input_MOTION_BAND_NPROC_REP = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of processors to be used per replica environment (for parallel
        runs)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.NPROC_REP'))

    x_cp2k_input_MOTION_BAND_NUMBER_OF_REPLICA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of Replica to use in the BAND
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.NUMBER_OF_REPLICA'))

    x_cp2k_input_MOTION_BAND_POT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the type of potential used in the BAND calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.POT_TYPE'))

    x_cp2k_input_MOTION_BAND_PROC_DIST_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the topology of the mapping of processors into replicas.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.PROC_DIST_TYPE'))

    x_cp2k_input_MOTION_BAND_ROTATE_FRAMES = Quantity(
        type=str,
        shape=[],
        description='''
        Compute at each BAND step the RMSD and rotate the frames in order to minimize it.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.ROTATE_FRAMES'))

    x_cp2k_input_MOTION_BAND_USE_COLVARS = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a version of the band scheme projected in a subspace of colvars.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.BAND.USE_COLVARS'))

    x_cp2k_section_input_MOTION_BAND_BANNER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_BANNER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.BANNER'))

    x_cp2k_section_input_MOTION_BAND_CI_NEB = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_CI_NEB'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CI_NEB'))

    x_cp2k_section_input_MOTION_BAND_CONVERGENCE_CONTROL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_CONVERGENCE_CONTROL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CONVERGENCE_CONTROL'))

    x_cp2k_section_input_MOTION_BAND_CONVERGENCE_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_CONVERGENCE_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.CONVERGENCE_INFO'))

    x_cp2k_section_input_MOTION_BAND_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.ENERGY'))

    x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_OPTIMIZE_BAND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.OPTIMIZE_BAND'))

    x_cp2k_section_input_MOTION_BAND_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_MOTION_BAND_REPLICA_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_REPLICA_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA_INFO'))

    x_cp2k_section_input_MOTION_BAND_REPLICA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_REPLICA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.REPLICA'))

    x_cp2k_section_input_MOTION_BAND_STRING_METHOD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND_STRING_METHOD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND.STRING_METHOD'))


class x_cp2k_section_input_MOTION_CELL_OPT_BFGS_RESTART(MSection):
    '''
    Controls the printing of Hessian Restart file
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.BFGS.RESTART'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART.ADD_LAST'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART.FILENAME'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_CELL_OPT_BFGS(MSection):
    '''
    Provides parameters to tune the BFGS optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.BFGS'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the file used to read the initial Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART_FILE_NAME'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_RESTART_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the reading of the initial Hessian from file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.RESTART_HESSIAN'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_TRUST_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Trust radius used in BFGS. Previously set to 0.1. Large values can lead to
        instabilities
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.TRUST_RADIUS'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_USE_MODEL_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a model Hessian as initial guess instead of a unit matrix. Should lead in
        general to improved convergence might be switched off for exotic cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.USE_MODEL_HESSIAN'))

    x_cp2k_input_MOTION_CELL_OPT_BFGS_USE_RAT_FUN_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Includes a rational function optimization to determine the step. Previously
        default but did not improve convergence in many cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.BFGS.USE_RAT_FUN_OPT'))

    x_cp2k_section_input_MOTION_CELL_OPT_BFGS_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_BFGS_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.BFGS.RESTART'))


class x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_2PNT(MSection):
    '''
    Provides parameters to tune the line search for the two point based line search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_2PNT_LINMIN_GRAD_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        Use only the gradient, not the energy for line minimizations (e.g. in conjugate
        gradients).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.2PNT.LINMIN_GRAD_ONLY'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_2PNT_MAX_ALLOWED_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Max allowed value for the line search step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.2PNT.MAX_ALLOWED_STEP'))


class x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD(MSection):
    '''
    Provides parameters to tune the line search for the gold search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD_BRACK_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Limit in 1D bracketing during line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD.BRACK_LIMIT'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD_BRENT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in brent algorithm (used for the line search in
        Conjugated Gradients Optimization)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD.BRENT_MAX_ITER'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD_BRENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance requested during Brent line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD.BRENT_TOL'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD_INITIAL_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size used, e.g. for bracketing or minimizers. Might need to be
        reduced for systems with close contacts
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD.INITIAL_STEP'))


class x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH(MSection):
    '''
    Provides parameters to tune the line search during the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH'))

    x_cp2k_input_MOTION_CELL_OPT_CG_LINE_SEARCH_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the CG optimizer, in increasing order of
        robustness and cost.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.LINE_SEARCH.TYPE'))

    x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_2PNT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_2PNT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH_GOLD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH.GOLD'))


class x_cp2k_section_input_MOTION_CELL_OPT_CG(MSection):
    '''
    Provides parameters to tune the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG'))

    x_cp2k_input_MOTION_CELL_OPT_CG_FLETCHER_REEVES = Quantity(
        type=str,
        shape=[],
        description='''
        Uses FLETCHER-REEVES instead of POLAK-RIBIERE when using Conjugate Gradients
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.FLETCHER_REEVES'))

    x_cp2k_input_MOTION_CELL_OPT_CG_MAX_STEEP_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of steepest descent steps before starting the conjugate gradients
        optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.MAX_STEEP_STEPS'))

    x_cp2k_input_MOTION_CELL_OPT_CG_RESTART_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Cosine of the angle between two consecutive searching directions. If the angle
        during a CG optimization is less than the one corresponding to  to the
        RESTART_LIMIT the CG is reset and one step of steepest descent is  performed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.CG.RESTART_LIMIT'))

    x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_CG_LINE_SEARCH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG.LINE_SEARCH'))


class x_cp2k_section_input_MOTION_CELL_OPT_LBFGS(MSection):
    '''
    Provides parameters to tune the limited memory BFGS (LBFGS) optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.LBFGS'))

    x_cp2k_input_MOTION_CELL_OPT_LBFGS_MAX_F_PER_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of force evaluations per iteration(used for the line search)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.LBFGS.MAX_F_PER_ITER'))

    x_cp2k_input_MOTION_CELL_OPT_LBFGS_MAX_H_RANK = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum rank (and consequently size) of the approximate Hessian matrix used by the
        LBFGS optimizer. Larger values (e.g. 30) will accelerate the convergence behaviour
        at the cost of a larger memory consumption.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.LBFGS.MAX_H_RANK'))

    x_cp2k_input_MOTION_CELL_OPT_LBFGS_WANTED_PROJ_GRADIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested norm threshold of the
        gradient multiplied by the approximate Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.LBFGS.WANTED_PROJ_GRADIENT'))

    x_cp2k_input_MOTION_CELL_OPT_LBFGS_WANTED_REL_F_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested relative error on the
        objective functionof the optimizer (the energy)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.LBFGS.WANTED_REL_F_ERROR'))


class x_cp2k_section_input_MOTION_CELL_OPT(MSection):
    '''
    This section sets the environment for the optimization of the simulation cell. Two
    possible schemes are available: (1) Zero temperature optimization;  (2) Finite
    temperature optimization.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT'))

    x_cp2k_input_MOTION_CELL_OPT_EXTERNAL_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the external pressure (1 value or the full 9 components of the pressure
        tensor) applied during the cell optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.EXTERNAL_PRESSURE'))

    x_cp2k_input_MOTION_CELL_OPT_KEEP_ANGLES = Quantity(
        type=str,
        shape=[],
        description='''
        Keep angles between the cell vectors constant, but allow the lenghts of the cell
        vectors to change independently. Albeit general, this is most useful for triclinic
        cells, to enforce higher symmetry, see KEEP_SYMMETRY.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.KEEP_ANGLES'))

    x_cp2k_input_MOTION_CELL_OPT_KEEP_SYMMETRY = Quantity(
        type=str,
        shape=[],
        description='''
        Keep the requested initial cell symmetry (e.g. during a cell optimisation). The
        initial symmetry must be specified in the &CELL section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.KEEP_SYMMETRY'))

    x_cp2k_input_MOTION_CELL_OPT_MAX_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum geometry change between the current and the
        last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.MAX_DR'))

    x_cp2k_input_MOTION_CELL_OPT_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum force component of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.MAX_FORCE'))

    x_cp2k_input_MOTION_CELL_OPT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of geometry optimization steps. One step might imply
        several force evaluations for the CG and LBFGS optimizers.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.MAX_ITER'))

    x_cp2k_input_MOTION_CELL_OPT_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which method to use to perform a geometry optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.OPTIMIZER'))

    x_cp2k_input_MOTION_CELL_OPT_PRESSURE_TOLERANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the Pressure tolerance (compared to the external pressure) to achieve
        during the cell optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.PRESSURE_TOLERANCE'))

    x_cp2k_input_MOTION_CELL_OPT_RMS_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) geometry change between the
        current and the last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.RMS_DR'))

    x_cp2k_input_MOTION_CELL_OPT_RMS_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) force of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.RMS_FORCE'))

    x_cp2k_input_MOTION_CELL_OPT_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for the CELL_OPT module.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.STEP_START_VAL'))

    x_cp2k_input_MOTION_CELL_OPT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of method to use for the optimization of the simulation cell
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CELL_OPT.TYPE'))

    x_cp2k_section_input_MOTION_CELL_OPT_BFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_BFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.BFGS'))

    x_cp2k_section_input_MOTION_CELL_OPT_CG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_CG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.CG'))

    x_cp2k_section_input_MOTION_CELL_OPT_LBFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT_LBFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT.LBFGS'))


class x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLLECTIVE.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE(MSection):
    '''
    Used to constraint collective (general) degrees of freedom, writing langrangian
    multipliers to file.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLLECTIVE'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_COLVAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index (in input file order) of the type of colvar to constrain.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.COLVAR'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the MM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the QM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_INTERMOLECULAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the constraint/restraint is intermolecular.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.INTERMOLECULAR'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_MOLECULE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the index of the molecule kind (in input file order)on which the
        constraint will be applied. MOLECULE and MOLNAME keyword exclude themself
        mutually.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.MOLECULE'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecule on which the constraint will be applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.MOLNAME'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_TARGET_GROWTH = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the growth speed of the target value of the constrained collective
        variable.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.TARGET_GROWTH'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_TARGET_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the limit of the growth of the target value of the constrained
        collective variable. By default no limit at the colvar growth is set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.TARGET_LIMIT'))

    x_cp2k_input_MOTION_CONSTRAINT_COLLECTIVE_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the target value of the constrained collective variable (units depend on
        the colvar).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLLECTIVE.TARGET'))

    x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLLECTIVE.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT_COLVAR_RESTART(MSection):
    '''
    Specify restart position only for COLVAR restraints.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLVAR_RESTART'))

    x_cp2k_input_MOTION_CONSTRAINT_COLVAR_RESTART_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The restarting values for COLVAR restraints. The order is an internal order. So if
        you decide to modify these values by hand first think what you're doing!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.COLVAR_RESTART.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_CONSTRAINT_CONSTRAINT_INFO(MSection):
    '''
    Prints information about iterative constraints solutions
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.CONSTRAINT_INFO'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INFO.FILENAME'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_CONSTRAINT_FIX_ATOM_RESTART(MSection):
    '''
    Specify restart position only for FIXED_ATOMS restraints.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIX_ATOM_RESTART'))

    x_cp2k_input_MOTION_CONSTRAINT_FIX_ATOM_RESTART_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        The restarting position of fixed atoms for restraints. The order is an internal
        order. So if you decide to modify these values by hand first think what you're
        doing!
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIX_ATOM_RESTART.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIXED_ATOMS.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS(MSection):
    '''
    This section is used to constraint the overall atomic position (X,Y,Z). In case a
    restraint is specified the value of the TARGET is considered to be the value of the
    coordinates at the beginning of the run or alternatively the corresponding value in
    the section: FIX_ATOM_RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIXED_ATOMS'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_COMPONENTS_TO_FIX = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which components (X,Y,Z or combinations) of the atoms specified in the
        sectionwill be constrained/restrained.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.COMPONENTS_TO_FIX'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the MM region within a QM/MM calculation. This
        keyword is active only together with MOLNAME
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the QM region within a QM/MM calculation. This
        keyword is active only together with MOLNAME
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to freeze.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.LIST'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are fixed according to the argument.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.MM_SUBSYS'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecule to fix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.MOLNAME'))

    x_cp2k_input_MOTION_CONSTRAINT_FIXED_ATOMS_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are fixed according to the argument.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.FIXED_ATOMS.QM_SUBSYS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIXED_ATOMS.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT_G3X3_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G3X3.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_G3X3(MSection):
    '''
    This section is used to set 3x3 (3 atoms and 3 distances) constraints.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G3X3'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Atoms' index on which apply the constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.ATOMS'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_DISTANCES = Quantity(
        type=str,
        shape=[],
        description='''
        The constrained distances' values.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.DISTANCES'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the MM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the QM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_INTERMOLECULAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the constraint/restraint is intermolecular.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.INTERMOLECULAR'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_MOLECULE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the molecule kind number on which constraint will be applied. MOLECULE
        and MOLNAME keyword exclude themself mutually.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.MOLECULE'))

    x_cp2k_input_MOTION_CONSTRAINT_G3X3_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecule on which the constraint will be applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G3X3.MOLNAME'))

    x_cp2k_section_input_MOTION_CONSTRAINT_G3X3_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_G3X3_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G3X3.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT_G4X6_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G4X6.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_G4X6(MSection):
    '''
    This section is used to set 4x6 (4 atoms and 6 distances) constraints.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G4X6'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Atoms' index on which apply the constraint
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.ATOMS'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_DISTANCES = Quantity(
        type=str,
        shape=[],
        description='''
        The constrained distances' values.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.DISTANCES'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the MM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the QM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_INTERMOLECULAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the constraint/restraint is intermolecular.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.INTERMOLECULAR'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_MOLECULE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the molecule number on which constraint will be applied. MOLECULE and
        MOLNAME keyword exclude themself mutually.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.MOLECULE'))

    x_cp2k_input_MOTION_CONSTRAINT_G4X6_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecule on which the constraint will be applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.G4X6.MOLNAME'))

    x_cp2k_section_input_MOTION_CONSTRAINT_G4X6_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_G4X6_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G4X6.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.HBONDS.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS(MSection):
    '''
    This section is used to set bonds constraints involving Hydrogen atoms
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.HBONDS'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_ATOM_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atoms' type forming a bond with an hydrogen. If not specified  the
        default bond value of the first molecule is used as constraint target
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.ATOM_TYPE'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not shake HBONDS in the MM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not shake HBONDS in the QM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_MOLECULE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the indexes of the molecule kind (in input file order)on which the
        constraint will be applied. MOLECULE and MOLNAME keyword exclude themself
        mutually.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.MOLECULE'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the names of the molecule on which the constraint will be applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.MOLNAME'))

    x_cp2k_input_MOTION_CONSTRAINT_HBONDS_TARGETS = Quantity(
        type=str,
        shape=[],
        description='''
        The constrained distances' values  for the types defines in ATOM_TYPE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.HBONDS.TARGETS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.HBONDS.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS(MSection):
    '''
    Prints out the lagrange multipliers of the specified constraints during an MD.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS'))

    x_cp2k_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS.ADD_LAST'))

    x_cp2k_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS.FILENAME'))

    x_cp2k_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE_RESTRAINT(MSection):
    '''
    Activate and specify information on restraint instead of constraint
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.VIRTUAL_SITE.RESTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_RESTRAINT_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the force constant for the harmonic restraint. The functional form for
        the restraint is: K*(X-TARGET)^2.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.RESTRAINT.K'))


class x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE(MSection):
    '''
    This section is used to set a virtual interaction-site constraint.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.VIRTUAL_SITE'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Atoms' index on which apply the constraint (v i j k), first is virtual site
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.ATOMS'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_EXCLUDE_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the MM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.EXCLUDE_MM'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_EXCLUDE_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Does not apply the constraint to the QM region within a QM/MM calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.EXCLUDE_QM'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_INTERMOLECULAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if the constraint/restraint is intermolecular.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.INTERMOLECULAR'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_MOLECULE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the molecule number on which constraint will be applied. MOLECULE and
        MOLNAME keyword exclude themself mutually.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.MOLECULE'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecule on which the constraint will be applied.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.MOLNAME'))

    x_cp2k_input_MOTION_CONSTRAINT_VIRTUAL_SITE_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The constrained paramters' values to construct virtual site.r_v=a*r_ij+b*r_kj
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.VIRTUAL_SITE.PARAMETERS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE_RESTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE_RESTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.VIRTUAL_SITE.RESTRAINT'))


class x_cp2k_section_input_MOTION_CONSTRAINT(MSection):
    '''
    Section specifying information regarding how to impose constraints on the system.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT'))

    x_cp2k_input_MOTION_CONSTRAINT_CONSTRAINT_INIT = Quantity(
        type=str,
        shape=[],
        description='''
        Apply constraints to the initial position and velocities. Default is to apply
        constraints only after the first MD step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.CONSTRAINT_INIT'))

    x_cp2k_input_MOTION_CONSTRAINT_ROLL_TOLERANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Set the tolerance for the roll constraint algorithm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.ROLL_TOLERANCE'))

    x_cp2k_input_MOTION_CONSTRAINT_SHAKE_TOLERANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Set the tolerance for the shake/rattle constraint algorithm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.CONSTRAINT.SHAKE_TOLERANCE'))

    x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_COLLECTIVE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLLECTIVE'))

    x_cp2k_section_input_MOTION_CONSTRAINT_COLVAR_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_COLVAR_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.COLVAR_RESTART'))

    x_cp2k_section_input_MOTION_CONSTRAINT_CONSTRAINT_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_CONSTRAINT_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.CONSTRAINT_INFO'))

    x_cp2k_section_input_MOTION_CONSTRAINT_FIX_ATOM_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_FIX_ATOM_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIX_ATOM_RESTART'))

    x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_FIXED_ATOMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.FIXED_ATOMS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_G3X3 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_G3X3'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G3X3'))

    x_cp2k_section_input_MOTION_CONSTRAINT_G4X6 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_G4X6'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.G4X6'))

    x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_HBONDS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.HBONDS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_LAGRANGE_MULTIPLIERS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.LAGRANGE_MULTIPLIERS'))

    x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT_VIRTUAL_SITE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT.VIRTUAL_SITE'))


class x_cp2k_section_input_MOTION_DRIVER(MSection):
    '''
    This section defines the parameters needed to run in i-PI driver mode.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.DRIVER'))

    x_cp2k_input_MOTION_DRIVER_HOST = Quantity(
        type=str,
        shape=[],
        description='''
        Host name for the i-PI server.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.DRIVER.HOST'))

    x_cp2k_input_MOTION_DRIVER_PORT = Quantity(
        type=str,
        shape=[],
        description='''
        Port number for the i-PI server.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.DRIVER.PORT'))

    x_cp2k_input_MOTION_DRIVER_UNIX = Quantity(
        type=str,
        shape=[],
        description='''
        Use a UNIX socket rather than an INET socket.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.DRIVER.UNIX'))


class x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL(MSection):
    '''
    Controls the printing of FP info at startup
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL.ADD_LAST'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL.FILENAME'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS(MSection):
    '''
    Controls the printing of FP info during flexible partitioning simulations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS.ADD_LAST'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS.FILENAME'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING(MSection):
    '''
    This section sets up flexible_partitioning
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_BIAS = Quantity(
        type=str,
        shape=[],
        description='''
        If a bias potential counter-acting the weight term should be applied
        (recommended).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.BIAS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_CENTRAL_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the central atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.CENTRAL_ATOM'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_INNER_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that should remain close to the central atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.INNER_ATOMS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_INNER_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        radius of the inner wall
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.INNER_RADIUS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_OUTER_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms that should remain far from the central atom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.OUTER_ATOMS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_OUTER_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        radius of the outer wall
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.OUTER_RADIUS'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_SMOOTH_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the width of the smooth counting function.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.SMOOTH_WIDTH'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_STRENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the force constant of the repulsive harmonic potential
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.STRENGTH'))

    x_cp2k_input_MOTION_FLEXIBLE_PARTITIONING_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the temperature parameter that is used in the baising potential.It is
        recommended to use the actual simulation temperature
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FLEXIBLE_PARTITIONING.TEMPERATURE'))

    x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_CONTROL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING.CONTROL'))

    x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING_WEIGHTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING.WEIGHTS'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE(MSection):
    '''
    Controls the calculation of delta free energies with the alchemical change method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE'))

    x_cp2k_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE_EPS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        Set the relative tolerance for the convergence of the free energy derivative
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE.EPS_CONV'))

    x_cp2k_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE_NEQUIL_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Set the number of equilibration steps, skipped to compute averages
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE.NEQUIL_STEPS'))

    x_cp2k_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE_PARAMETER = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the perturbing parameter of the alchemical change tranformation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE.PARAMETER'))

    x_cp2k_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE_WEIGHTING_FUNCTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the weighting function (umbrella potential, part of the mixing function)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE.WEIGHTING_FUNCTION'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO(MSection):
    '''
    Controls the printing of basic and summary information during the Free Energy
    calculation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO'))

    x_cp2k_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO.ADD_LAST'))

    x_cp2k_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO.FILENAME'))

    x_cp2k_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_FS(MSection):
    '''
    Colvar force within an extended Lagrangian formalism.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_FS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_FS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specified the theta
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_FS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS0(MSection):
    '''
    Colvar position within an extended Lagrangian formalism.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS0'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS0_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specified the positions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS0.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS(MSection):
    '''
    Colvar Theta within an extended Lagrangian formalism.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specified the theta
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_VVP(MSection):
    '''
    Colvar velocities within an extended Lagrangian formalism.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_VVP'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_VVP_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specified the velocities
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_VVP.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_GAUSSIAN(MSection):
    '''
    Parameters controlling the gaussian wall.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.GAUSSIAN'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_GAUSSIAN_SIGMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the width of the gaussian: WW*e^(-((CV-POS)/sigma)^2)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.GAUSSIAN.SIGMA'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_GAUSSIAN_WW = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the height of the gaussian: WW*e^(-((CV-POS)/sigma)^2)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.GAUSSIAN.WW'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUADRATIC(MSection):
    '''
    Parameters controlling the quadratic wall
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUADRATIC'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUADRATIC_DIRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the direction of the wall.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUADRATIC.DIRECTION'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUADRATIC_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the quadratic potential constant: K*(CV-POS)^2
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUADRATIC.K'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUARTIC(MSection):
    '''
    Parameters controlling the quartic wall
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUARTIC'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUARTIC_DIRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the direction of the wall.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUARTIC.DIRECTION'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUARTIC_K = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the quartic potential constant: K*(CV-(POS+/-(1/K^(1/4))))^4
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUARTIC.K'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_REFLECTIVE(MSection):
    '''
    Parameters controlling the reflective wall
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.REFLECTIVE'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_REFLECTIVE_DIRECTION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the direction of the wall.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.REFLECTIVE.DIRECTION'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL(MSection):
    '''
    Controls the activation of walls on COLVAR during a metadynamic run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the value of the colvar for the wall position
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.POSITION'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the type of wall
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.TYPE'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_GAUSSIAN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_GAUSSIAN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.GAUSSIAN'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUADRATIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUADRATIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUADRATIC'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUARTIC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_QUARTIC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.QUARTIC'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_REFLECTIVE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL_REFLECTIVE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL.REFLECTIVE'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR(MSection):
    '''
    This section specify the nature of the collective variables.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_COLVAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the colvar on which to apply metadynamics.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.COLVAR'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the friction term in Langevin integration of the collective variable in
        the extended lagrangian scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.GAMMA'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_LAMBDA = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the lambda parameter of the collective variable in the extended
        lagrangian scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.LAMBDA'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_MASS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the mass parameter of the collective variable in the extended lagrangian
        scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.MASS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_METAVAR_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the scale factor for the following collective variable. The history
        dependent term has the expression: WW * Sum_{j=1}^{nhills} Prod_{k=1}^{ncolvar}
        [EXP[-0.5*((ss-ss0(k,j))/SCALE(k))^2]], where ncolvar is the number of defined
        METAVAR and nhills is the number of spawned hills.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.METAVAR.SCALE'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR_WALL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR.WALL'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKERS_FILE_NAME(MSection):
    '''
    Specify the basename for the NUMBER_OF_WALKERS files used to communicate between the
    walkers. Absolute path can be input as well together with the filename. One file will
    be created for each spawned hill.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKERS_FILE_NAME'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKERS_FILE_NAME_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specified the communication filename for each walker.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKERS_FILE_NAME.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS(MSection):
    '''
    Enables and configures the metadynamics using multiple walkers.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_NUMBER_OF_WALKERS = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the total number of walkers in the metadynamic run.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.NUMBER_OF_WALKERS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the usage of the multiple walkers in a metadynamics run.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKER_COMM_FREQUENCY = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the frequency (in unit of spawned hills) for the communication between the
        several walkers, in order to update the local list of hills with the ones coming
        from the other walkers
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKER_COMM_FREQUENCY'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKER_ID = Quantity(
        type=str,
        shape=[],
        description='''
        Sets the walker ID for the local metadynamics run.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKER_ID'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKERS_STATUS = Quantity(
        type=str,
        shape=[],
        description='''
        Stores the status of the several walkers in the local run.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKERS_STATUS'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKERS_FILE_NAME = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS_WALKERS_FILE_NAME'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS.WALKERS_FILE_NAME'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_HEIGHT(MSection):
    '''
    The height of the spawned hills during metadynamics.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_HEIGHT'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_HEIGHT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the spawned hills
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_HEIGHT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_INVDT(MSection):
    '''
    The inverse of the DELTA_T parameter used for Well-Tempered metadynamics.Used for
    RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_INVDT'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_INVDT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the spawned hills
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_INVDT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_POS(MSection):
    '''
    The position of the spawned hills during metadynamics.Used for RESTART.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_POS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_POS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the spawned hills
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_POS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_SCALE(MSection):
    '''
    The scales of the spawned hills during metadynamics.Used for RESTART. When a scale is
    zero in one or more directions, the Gaussian hill is assumed to be infinitely wide in
    those directions. The latter can be used to combine spawned hills from multiple 1D
    metadynamics runs in one multidimensional metadynamics run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_SCALE'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_SCALE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the spawned hills
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_SCALE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN(MSection):
    '''
    This section sets parameters to set up a calculation of metadynamics.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_COLVAR_AVG_TEMPERATURE_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        COLVAR average temperature. Only for restarting purposes.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.COLVAR_AVG_TEMPERATURE_RESTART'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_DELTA_T = Quantity(
        type=str,
        shape=[],
        description='''
        If Well-tempered metaD is used, the temperature parameter must be specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.DELTA_T'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_DO_HILLS = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables the spawning of the hills. Default .FALSE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.DO_HILLS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_HILL_TAIL_CUTOFF = Quantity(
        type=str,
        shape=[],
        description='''
        By setting this variable larger than 0 the tail of the Gaussian hill  is damped to
        zero faster. The Gaussian function is multiplied by a cutoff function that becomes
        active at |x-X0|>HILL_TAIL_CUTOFF*SCALE, where X0 is the location of the Gaussian
        and SCALE is the width of the Gaussian. For more than one METAVAR X0 and SCALE are
        METAVAR-dependent.  (1-(|x-X0|/HILL_TAIL_CUTOFF*SCALE)^P_EXP)/(1-(|x-X0|/HILL_TAIL
        _CUTOFF*SCALE)^Q_EXP)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.HILL_TAIL_CUTOFF'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_LAGRANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies whether an extended-lagrangian should be used. Default .FALSE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.LAGRANGE'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_LANGEVIN = Quantity(
        type=str,
        shape=[],
        description='''
        If a Lagrangian scheme is used the eq. motion of the COLVARS are integrated with a
        LANGEVIN scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.LANGEVIN'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MIN_DISP = Quantity(
        type=str,
        shape=[],
        description='''
        Minimum displacement between hills before placing a new hill.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MIN_DISP'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_MIN_NT_HILLS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the minimum MD step interval between spawning two hills. If specified, it
        must be >= than NT_HILLS. In case MIN_DISP is used, if MIN_DISP is satisfied
        before MIN_NT_HILLS MD steps have been performed, the MD will continue without any
        spawning until MIN_NT_HILLS is reached. The default value has the net effect of
        skipping this check.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.MIN_NT_HILLS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_NHILLS_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting value of previously spawned hills
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.NHILLS_START_VAL'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_NT_HILLS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the maximum MD step interval between spawning two hills. When negative, no
        new hills are spawned and only the hills read from SPAWNED_HILLS_* are in effect.
        The latteris useful when one wants to add a custom constant bias potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.NT_HILLS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_OLD_HILL_NUMBER = Quantity(
        type=str,
        shape=[],
        description='''
        Index of the last hill spawned for this walker.Needed to calculate MIN_DISP
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.OLD_HILL_NUMBER'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_OLD_HILL_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Timestep of the last hill spawned for this walker.Needed to calculate MIN_DISP
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.OLD_HILL_STEP'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_P_EXPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Exponent at the numerator of the cutoff function to damp the tail of the Gaussian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.P_EXPONENT'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_PLUMED_INPUT_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the file name of the external plumed input file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.PLUMED_INPUT_FILE'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_Q_EXPONENT = Quantity(
        type=str,
        shape=[],
        description='''
        Exponent at the denominator of the cutoff function to damp the tail of the
        Gaussian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.Q_EXPONENT'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_SLOW_GROWTH = Quantity(
        type=str,
        shape=[],
        description='''
        Let the last hill grow slowly over NT_HILLS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.SLOW_GROWTH'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for metadynamics
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.STEP_START_VAL'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_TAMCSTEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of sampling points for z
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.TAMCSTEPS'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        If a Lagrangian scheme is used the temperature tolerance for the collective
        variables is specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.TEMP_TOL'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        If a Lagrangian scheme is used the temperature for the collective variables is
        specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.TEMPERATURE'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_TIMESTEP = Quantity(
        type=str,
        shape=[],
        description='''
        The length of an integration step for colvars (TAMC only)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.TIMESTEP'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_USE_PLUMED = Quantity(
        type=str,
        shape=[],
        description='''
        Specify whether to use plumed as an external metadynamics driver.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.USE_PLUMED'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_WELL_TEMPERED = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword enables Well-tempered metadynamics. Default .FALSE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.WELL_TEMPERED'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_WTGAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        If Well-tempered metaD is used, the gamma parameter must be specified if not
        DELTA_T.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.WTGAMMA'))

    x_cp2k_input_MOTION_FREE_ENERGY_METADYN_WW = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the height of the gaussian to spawn. Default 0.1 .
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METADYN.WW'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_FS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_FS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_FS'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS0 = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS0'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS0'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_SS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_SS'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_VVP = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_EXT_LAGRANGE_VVP'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.EXT_LAGRANGE_VVP'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_METAVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.METAVAR'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_MULTIPLE_WALKERS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.MULTIPLE_WALKERS'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_HEIGHT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_HEIGHT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_HEIGHT'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_INVDT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_INVDT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_INVDT'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_POS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_POS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_POS'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_SCALE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN_SPAWNED_HILLS_SCALE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN.SPAWNED_HILLS_SCALE'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL(MSection):
    '''
    This section specify parameters controlling the convergence of the free energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_COARSE_GRAINED_POINTS = Quantity(
        type=str,
        shape=[],
        description='''
        Set the minimum amount of coarse grained points to collect before starting the
        statistical analysis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.COARSE_GRAINED_POINTS'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_COARSE_GRAINED_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Width of segments in MD steps to generate the set of coarse grained data,
        providing a correlation independent data set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.COARSE_GRAINED_WIDTH'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_EPS_CONV = Quantity(
        type=str,
        shape=[],
        description='''
        Set the relative tolerance for the convergence of the collective variable averages
        used to compute the free energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.EPS_CONV'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_K_CONFIDENCE_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Set the confidence limit for the Mann-Kendall trend test.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.K_CONFIDENCE_LIMIT'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_MAX_COARSE_GRAINED_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Max Width of segments in MD steps to generate the set of coarse grained data.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.MAX_COARSE_GRAINED_WIDTH'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_SW_CONFIDENCE_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Set the confidence limit for the Shapiro-Wilks normality test.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.SW_CONFIDENCE_LIMIT'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL_VN_CONFIDENCE_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Set the confidence limit for the Von Neumann serial correlation test.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL.VN_CONFIDENCE_LIMIT'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_UVAR(MSection):
    '''
    This section specify the nature of the collective variables used in computing the free
    energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.UVAR'))

    x_cp2k_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_UVAR_COLVAR = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the colvar used to compute free energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.UVAR.COLVAR'))


class x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION(MSection):
    '''
    Controls the calculation of free energy derivatives with the umbrella integration
    method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_CONVERGENCE_CONTROL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.CONVERGENCE_CONTROL'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_UVAR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION_UVAR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION.UVAR'))


class x_cp2k_section_input_MOTION_FREE_ENERGY(MSection):
    '''
    Controls the calculation of free energy and free energy derivatives with different
    possible methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY'))

    x_cp2k_input_MOTION_FREE_ENERGY_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the method to use to compute free energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.FREE_ENERGY.METHOD'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_ALCHEMICAL_CHANGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.ALCHEMICAL_CHANGE'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_FREE_ENERGY_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.FREE_ENERGY_INFO'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_METADYN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.METADYN'))

    x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY_UMBRELLA_INTEGRATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY.UMBRELLA_INTEGRATION'))


class x_cp2k_section_input_MOTION_GEO_OPT_BFGS_RESTART(MSection):
    '''
    Controls the printing of Hessian Restart file
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.BFGS.RESTART'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART.ADD_LAST'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART.FILENAME'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_GEO_OPT_BFGS(MSection):
    '''
    Provides parameters to tune the BFGS optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.BFGS'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the file used to read the initial Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART_FILE_NAME'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_RESTART_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the reading of the initial Hessian from file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.RESTART_HESSIAN'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_TRUST_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Trust radius used in BFGS. Previously set to 0.1. Large values can lead to
        instabilities
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.TRUST_RADIUS'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_USE_MODEL_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a model Hessian as initial guess instead of a unit matrix. Should lead in
        general to improved convergence might be switched off for exotic cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.USE_MODEL_HESSIAN'))

    x_cp2k_input_MOTION_GEO_OPT_BFGS_USE_RAT_FUN_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Includes a rational function optimization to determine the step. Previously
        default but did not improve convergence in many cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.BFGS.USE_RAT_FUN_OPT'))

    x_cp2k_section_input_MOTION_GEO_OPT_BFGS_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_BFGS_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.BFGS.RESTART'))


class x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_2PNT(MSection):
    '''
    Provides parameters to tune the line search for the two point based line search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_2PNT_LINMIN_GRAD_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        Use only the gradient, not the energy for line minimizations (e.g. in conjugate
        gradients).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.2PNT.LINMIN_GRAD_ONLY'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_2PNT_MAX_ALLOWED_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Max allowed value for the line search step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.2PNT.MAX_ALLOWED_STEP'))


class x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD(MSection):
    '''
    Provides parameters to tune the line search for the gold search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD_BRACK_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Limit in 1D bracketing during line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD.BRACK_LIMIT'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD_BRENT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in brent algorithm (used for the line search in
        Conjugated Gradients Optimization)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD.BRENT_MAX_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD_BRENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance requested during Brent line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD.BRENT_TOL'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD_INITIAL_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size used, e.g. for bracketing or minimizers. Might need to be
        reduced for systems with close contacts
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD.INITIAL_STEP'))


class x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH(MSection):
    '''
    Provides parameters to tune the line search during the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH'))

    x_cp2k_input_MOTION_GEO_OPT_CG_LINE_SEARCH_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the CG optimizer, in increasing order of
        robustness and cost.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.LINE_SEARCH.TYPE'))

    x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_2PNT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_2PNT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH_GOLD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH.GOLD'))


class x_cp2k_section_input_MOTION_GEO_OPT_CG(MSection):
    '''
    Provides parameters to tune the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG'))

    x_cp2k_input_MOTION_GEO_OPT_CG_FLETCHER_REEVES = Quantity(
        type=str,
        shape=[],
        description='''
        Uses FLETCHER-REEVES instead of POLAK-RIBIERE when using Conjugate Gradients
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.FLETCHER_REEVES'))

    x_cp2k_input_MOTION_GEO_OPT_CG_MAX_STEEP_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of steepest descent steps before starting the conjugate gradients
        optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.MAX_STEEP_STEPS'))

    x_cp2k_input_MOTION_GEO_OPT_CG_RESTART_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Cosine of the angle between two consecutive searching directions. If the angle
        during a CG optimization is less than the one corresponding to  to the
        RESTART_LIMIT the CG is reset and one step of steepest descent is  performed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.CG.RESTART_LIMIT'))

    x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_CG_LINE_SEARCH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG.LINE_SEARCH'))


class x_cp2k_section_input_MOTION_GEO_OPT_LBFGS(MSection):
    '''
    Provides parameters to tune the limited memory BFGS (LBFGS) optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.LBFGS'))

    x_cp2k_input_MOTION_GEO_OPT_LBFGS_MAX_F_PER_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of force evaluations per iteration(used for the line search)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.LBFGS.MAX_F_PER_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_LBFGS_MAX_H_RANK = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum rank (and consequently size) of the approximate Hessian matrix used by the
        LBFGS optimizer. Larger values (e.g. 30) will accelerate the convergence behaviour
        at the cost of a larger memory consumption.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.LBFGS.MAX_H_RANK'))

    x_cp2k_input_MOTION_GEO_OPT_LBFGS_WANTED_PROJ_GRADIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested norm threshold of the
        gradient multiplied by the approximate Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.LBFGS.WANTED_PROJ_GRADIENT'))

    x_cp2k_input_MOTION_GEO_OPT_LBFGS_WANTED_REL_F_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested relative error on the
        objective functionof the optimizer (the energy)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.LBFGS.WANTED_REL_F_ERROR'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_DIMER_VECTOR(MSection):
    '''
    Specifies the initial dimer vector (used frequently to restart DIMER calculations). If
    not provided the starting orientation of the dimer is chosen randomly.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.DIMER_VECTOR'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_DIMER_VECTOR_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify on each line the components of the dimer vector.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.DIMER_VECTOR.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART(MSection):
    '''
    Controls the printing of Hessian Restart file
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART.ADD_LAST'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART.FILENAME'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS(MSection):
    '''
    Provides parameters to tune the BFGS optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the file used to read the initial Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART_FILE_NAME'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the reading of the initial Hessian from file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART_HESSIAN'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_TRUST_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Trust radius used in BFGS. Previously set to 0.1. Large values can lead to
        instabilities
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.TRUST_RADIUS'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_USE_MODEL_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a model Hessian as initial guess instead of a unit matrix. Should lead in
        general to improved convergence might be switched off for exotic cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.USE_MODEL_HESSIAN'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_USE_RAT_FUN_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Includes a rational function optimization to determine the step. Previously
        default but did not improve convergence in many cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.USE_RAT_FUN_OPT'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS.RESTART'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_2PNT(MSection):
    '''
    Provides parameters to tune the line search for the two point based line search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_2PNT_LINMIN_GRAD_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        Use only the gradient, not the energy for line minimizations (e.g. in conjugate
        gradients).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.2PNT.LINMIN_GRAD_ONLY'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_2PNT_MAX_ALLOWED_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Max allowed value for the line search step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.2PNT.MAX_ALLOWED_STEP'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD(MSection):
    '''
    Provides parameters to tune the line search for the gold search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD_BRACK_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Limit in 1D bracketing during line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD.BRACK_LIMIT'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD_BRENT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in brent algorithm (used for the line search in
        Conjugated Gradients Optimization)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD.BRENT_MAX_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD_BRENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance requested during Brent line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD.BRENT_TOL'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD_INITIAL_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size used, e.g. for bracketing or minimizers. Might need to be
        reduced for systems with close contacts
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD.INITIAL_STEP'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH(MSection):
    '''
    Provides parameters to tune the line search during the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the CG optimizer, in increasing order of
        robustness and cost.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.TYPE'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_2PNT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_2PNT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH_GOLD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH.GOLD'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG(MSection):
    '''
    Provides parameters to tune the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_FLETCHER_REEVES = Quantity(
        type=str,
        shape=[],
        description='''
        Uses FLETCHER-REEVES instead of POLAK-RIBIERE when using Conjugate Gradients
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.FLETCHER_REEVES'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_MAX_STEEP_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of steepest descent steps before starting the conjugate gradients
        optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.MAX_STEEP_STEPS'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_RESTART_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Cosine of the angle between two consecutive searching directions. If the angle
        during a CG optimization is less than the one corresponding to  to the
        RESTART_LIMIT the CG is reset and one step of steepest descent is  performed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.RESTART_LIMIT'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG_LINE_SEARCH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG.LINE_SEARCH'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS(MSection):
    '''
    Provides parameters to tune the limited memory BFGS (LBFGS) optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS_MAX_F_PER_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of force evaluations per iteration(used for the line search)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS.MAX_F_PER_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS_MAX_H_RANK = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum rank (and consequently size) of the approximate Hessian matrix used by the
        LBFGS optimizer. Larger values (e.g. 30) will accelerate the convergence behaviour
        at the cost of a larger memory consumption.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS.MAX_H_RANK'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS_WANTED_PROJ_GRADIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested norm threshold of the
        gradient multiplied by the approximate Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS.WANTED_PROJ_GRADIENT'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS_WANTED_REL_F_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested relative error on the
        objective functionof the optimizer (the energy)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS.WANTED_REL_F_ERROR'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT(MSection):
    '''
    This section sets the environment for the optimization of the rotation of the Dimer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_MAX_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum geometry change between the current and the
        last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.MAX_DR'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum force component of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.MAX_FORCE'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of geometry optimization steps. One step might imply
        several force evaluations for the CG and LBFGS optimizers.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.MAX_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which method to use to perform a geometry optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.OPTIMIZER'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_RMS_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) geometry change between the
        current and the last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.RMS_DR'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_RMS_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) force of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.RMS_FORCE'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for the ROT_OPT module.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.STEP_START_VAL'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_BFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.BFGS'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_CG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.CG'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT_LBFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT.LBFGS'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER(MSection):
    '''
    Specifies parameters for Dimer Method
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ANGLE_TOLERANCE = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword sets the value of the tolerance angle for the line search  performed
        to optimize the orientation of the dimer.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ANGLE_TOLERANCE'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_DR = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword sets the value for the DR parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.DR'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_INTERPOLATE_GRADIENT = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword controls the interpolation of the gradient whenever possible during
        the optimization of the Dimer. The use of this keywords saves 1 evaluation  of
        energy/forces.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.INTERPOLATE_GRADIENT'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_DIMER_VECTOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_DIMER_VECTOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.DIMER_VECTOR'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER_ROT_OPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER.ROT_OPT'))


class x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE(MSection):
    '''
    Specifies parameters to perform a transition state search
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE'))

    x_cp2k_input_MOTION_GEO_OPT_TRANSITION_STATE_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of method to use for locating transition states
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TRANSITION_STATE.METHOD'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE_DIMER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE.DIMER'))


class x_cp2k_section_input_MOTION_GEO_OPT(MSection):
    '''
    This section sets the environment of the geometry optimizer.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT'))

    x_cp2k_input_MOTION_GEO_OPT_MAX_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum geometry change between the current and the
        last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.MAX_DR'))

    x_cp2k_input_MOTION_GEO_OPT_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum force component of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.MAX_FORCE'))

    x_cp2k_input_MOTION_GEO_OPT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of geometry optimization steps. One step might imply
        several force evaluations for the CG and LBFGS optimizers.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.MAX_ITER'))

    x_cp2k_input_MOTION_GEO_OPT_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which method to use to perform a geometry optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.OPTIMIZER'))

    x_cp2k_input_MOTION_GEO_OPT_RMS_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) geometry change between the
        current and the last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.RMS_DR'))

    x_cp2k_input_MOTION_GEO_OPT_RMS_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) force of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.RMS_FORCE'))

    x_cp2k_input_MOTION_GEO_OPT_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for the GEO_OPT module.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.STEP_START_VAL'))

    x_cp2k_input_MOTION_GEO_OPT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which kind of geometry optimization to perform
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.GEO_OPT.TYPE'))

    x_cp2k_section_input_MOTION_GEO_OPT_BFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_BFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.BFGS'))

    x_cp2k_section_input_MOTION_GEO_OPT_CG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_CG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.CG'))

    x_cp2k_section_input_MOTION_GEO_OPT_LBFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_LBFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.LBFGS'))

    x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT_TRANSITION_STATE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT.TRANSITION_STATE'))


class x_cp2k_section_input_MOTION_MC_AVBMC(MSection):
    '''
    Parameters for Aggregation Volume Bias Monte Carlo (AVBMC) which explores cluster
    formation and destruction. Chen and Siepmann, J. Phys. Chem. B 105, 11275-11282
    (2001).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.AVBMC'))

    x_cp2k_input_MOTION_MC_AVBMC_AVBMC_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        The target atom for an AVBMC swap move for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.AVBMC.AVBMC_ATOM'))

    x_cp2k_input_MOTION_MC_AVBMC_AVBMC_RMAX = Quantity(
        type=str,
        shape=[],
        description='''
        The outer radius for an AVBMC swap move, in angstroms, for every molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.AVBMC.AVBMC_RMAX'))

    x_cp2k_input_MOTION_MC_AVBMC_AVBMC_RMIN = Quantity(
        type=str,
        shape=[],
        description='''
        The inner radius for an AVBMC swap move, in angstroms for every molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.AVBMC.AVBMC_RMIN'))

    x_cp2k_input_MOTION_MC_AVBMC_PBIAS = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of swapping to an inner region in an AVBMC swap move for each
        molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.AVBMC.PBIAS'))


class x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_BOX_DISPLACEMENTS(MSection):
    '''
    Maximum displacements for any move that is performed on each simulation box.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS.BOX_DISPLACEMENTS'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_BOX_DISPLACEMENTS_RMVOLUME = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum volume displacement, in angstrom**3.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.BOX_DISPLACEMENTS.RMVOLUME'))


class x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS(MSection):
    '''
    Maximum displacements for every move type that requires a value for each molecular
    type in the simulation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS_RMANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum bond angle displacement, in degrees, for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS.RMANGLE'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS_RMBOND = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum bond length displacement, in angstroms, for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS.RMBOND'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS_RMDIHEDRAL = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum dihedral angle distplacement, in degrees, for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS.RMDIHEDRAL'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS_RMROT = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum rotational displacement, in degrees, for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS.RMROT'))

    x_cp2k_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS_RMTRANS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum translational displacement, in angstroms, for each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS.RMTRANS'))


class x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS(MSection):
    '''
    The maximum displacements for all attempted moves.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS'))

    x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_BOX_DISPLACEMENTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_BOX_DISPLACEMENTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS.BOX_DISPLACEMENTS'))

    x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS_MOL_DISPLACEMENTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS.MOL_DISPLACEMENTS'))


class x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_BOX_PROBABILITIES(MSection):
    '''
    Probabilities of attempting various moves types on the box.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES.BOX_PROBABILITIES'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_BOX_PROBABILITIES_PMHMC_BOX = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a HMC move on this box.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.BOX_PROBABILITIES.PMHMC_BOX'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_BOX_PROBABILITIES_PMVOL_BOX = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a volume move on this box (GEMC_NpT).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.BOX_PROBABILITIES.PMVOL_BOX'))


class x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES(MSection):
    '''
    Probabilities of attempting various moves types on the various molecular types present
    in the simulation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES_PMAVBMC_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting an AVBMC swap move on each molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES.PMAVBMC_MOL'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES_PMROT_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a molecule rotation of a given molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES.PMROT_MOL'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES_PMSWAP_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a molecule swap of a given molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES.PMSWAP_MOL'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES_PMTRAION_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a conformational change of a given molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES.PMTRAION_MOL'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES_PMTRANS_MOL = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a molecule translation of a given molecule type.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES.PMTRANS_MOL'))


class x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES(MSection):
    '''
    Parameters for fraction of moves performed for each move type.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMAVBMC = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting an AVBMC swap move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMAVBMC'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMHMC = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a hybrid MC move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMHMC'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMSWAP = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a swap move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMSWAP'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMTRAION = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a conformational change.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMTRAION'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMTRANS = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a molecule translation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMTRANS'))

    x_cp2k_input_MOTION_MC_MOVE_PROBABILITIES_PMVOLUME = Quantity(
        type=str,
        shape=[],
        description='''
        The probability of attempting a volume move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_PROBABILITIES.PMVOLUME'))

    x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_BOX_PROBABILITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_BOX_PROBABILITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES.BOX_PROBABILITIES'))

    x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES_MOL_PROBABILITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES.MOL_PROBABILITIES'))


class x_cp2k_section_input_MOTION_MC_MOVE_UPDATES(MSection):
    '''
    Frequency for updating move maximum displacements.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_UPDATES'))

    x_cp2k_input_MOTION_MC_MOVE_UPDATES_IUPTRANS = Quantity(
        type=str,
        shape=[],
        description='''
        Every iuptrans steps update maximum translation/rotation/configurational changes.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_UPDATES.IUPTRANS'))

    x_cp2k_input_MOTION_MC_MOVE_UPDATES_IUPVOLUME = Quantity(
        type=str,
        shape=[],
        description='''
        Every iupvolume steps update maximum volume displacement.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVE_UPDATES.IUPVOLUME'))


class x_cp2k_section_input_MOTION_MC(MSection):
    '''
    This section sets parameters to set up a MonteCarlo calculation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC'))

    x_cp2k_input_MOTION_MC_BOX2_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        For GEMC, the name of the input file for the other box.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.BOX2_FILE_NAME'))

    x_cp2k_input_MOTION_MC_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print current cell length info to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.CELL_FILE_NAME'))

    x_cp2k_input_MOTION_MC_COORDINATE_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print the current coordinates to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.COORDINATE_FILE_NAME'))

    x_cp2k_input_MOTION_MC_DATA_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print current configurational info to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.DATA_FILE_NAME'))

    x_cp2k_input_MOTION_MC_DISCRETE_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        The size of the discrete volume move step, in angstroms.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.DISCRETE_STEP'))

    x_cp2k_input_MOTION_MC_ENERGY_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print current energies to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.ENERGY_FILE_NAME'))

    x_cp2k_input_MOTION_MC_ENSEMBLE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the type of simulation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.ENSEMBLE'))

    x_cp2k_input_MOTION_MC_ETA = Quantity(
        type=str,
        shape=[],
        description='''
        The free energy bias (in Kelvin) for swapping a molecule of each type into this
        box.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.ETA'))

    x_cp2k_input_MOTION_MC_IPRINT = Quantity(
        type=str,
        shape=[],
        description='''
        Prints coordinate/cell/etc information every IPRINT steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.IPRINT'))

    x_cp2k_input_MOTION_MC_LBIAS = Quantity(
        type=str,
        shape=[],
        description='''
        Dictates if we presample moves with a different potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.LBIAS'))

    x_cp2k_input_MOTION_MC_LDISCRETE = Quantity(
        type=str,
        shape=[],
        description='''
        Changes the volume of the box in discrete steps, one side at a time.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.LDISCRETE'))

    x_cp2k_input_MOTION_MC_LSTOP = Quantity(
        type=str,
        shape=[],
        description='''
        Makes nstep in terms of steps, instead of cycles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.LSTOP'))

    x_cp2k_input_MOTION_MC_MAX_DISP_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print current maximum displacement info to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MAX_DISP_FILE_NAME'))

    x_cp2k_input_MOTION_MC_MOLECULES_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print the number of molecules to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOLECULES_FILE_NAME'))

    x_cp2k_input_MOTION_MC_MOVES_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        The file to print the move statistics to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.MOVES_FILE_NAME'))

    x_cp2k_input_MOTION_MC_NMOVES = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of classical moves between energy evaluations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.NMOVES'))

    x_cp2k_input_MOTION_MC_NSTEP = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of MC cycles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.NSTEP'))

    x_cp2k_input_MOTION_MC_NSWAPMOVES = Quantity(
        type=str,
        shape=[],
        description='''
        How many insertions to try per swap move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.NSWAPMOVES'))

    x_cp2k_input_MOTION_MC_NVIRIAL = Quantity(
        type=str,
        shape=[],
        description='''
        Use this many random orientations to compute the second virial coefficient
        (ENSEMBLE=VIRIAL)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.NVIRIAL'))

    x_cp2k_input_MOTION_MC_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        The pressure for NpT simulations, in bar.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.PRESSURE'))

    x_cp2k_input_MOTION_MC_RANDOMTOSKIP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of random numbers from the acceptance/rejection stream to skip
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.RANDOMTOSKIP'))

    x_cp2k_input_MOTION_MC_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the restart file for MC information.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.RESTART_FILE_NAME'))

    x_cp2k_input_MOTION_MC_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Read initial configuration from restart file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.RESTART'))

    x_cp2k_input_MOTION_MC_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        The temperature of the simulation, in Kelvin.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.TEMPERATURE'))

    x_cp2k_input_MOTION_MC_VIRIAL_TEMPS = Quantity(
        type=str,
        shape=[],
        description='''
        The temperatures you wish to compute the virial coefficient for.  Only used if
        ensemble=VIRIAL.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MC.VIRIAL_TEMPS'))

    x_cp2k_section_input_MOTION_MC_AVBMC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_AVBMC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.AVBMC'))

    x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MAX_DISPLACEMENTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MAX_DISPLACEMENTS'))

    x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MOVE_PROBABILITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_PROBABILITIES'))

    x_cp2k_section_input_MOTION_MC_MOVE_UPDATES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC_MOVE_UPDATES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC.MOVE_UPDATES'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region  for the fast
    thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION.MM_SUBSYS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecules to thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION.MOLNAME'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION.QM_SUBSYS'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_COORD(MSection):
    '''
    The positions for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.COORD'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_FORCE(MSection):
    '''
    The forces for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.FORCE'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_MASS(MSection):
    '''
    The masses for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.MASS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE(MSection):
    '''
    paramameters of the Nose Hoover thermostat chain
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        length of the Nose-Hoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.LENGTH'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_MTS = Quantity(
        type=str,
        shape=[],
        description='''
        number of multiple timesteps to be used for the NoseHoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.MTS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        timeconstant of the thermostat chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.TIMECON'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_YOSHIDA = Quantity(
        type=str,
        shape=[],
        description='''
        order of the yoshida integretor used for the thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.YOSHIDA'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.COORD'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.FORCE'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.MASS'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST(MSection):
    '''
    Specify thermostat type and parameters controlling the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the defined region for fast thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.REGION'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the thermostat used for the constant temperature ensembles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.TYPE'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.DEFINE_REGION'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST.NOSE'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region  for the slow
    thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION.MM_SUBSYS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecules to thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION.MOLNAME'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION.QM_SUBSYS'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_COORD(MSection):
    '''
    The positions for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.COORD'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_FORCE(MSection):
    '''
    The forces for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.FORCE'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_MASS(MSection):
    '''
    The masses for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.MASS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE(MSection):
    '''
    paramameters of the Nose Hoover thermostat chain
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        length of the Nose-Hoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.LENGTH'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_MTS = Quantity(
        type=str,
        shape=[],
        description='''
        number of multiple timesteps to be used for the NoseHoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.MTS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        timeconstant of the thermostat chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.TIMECON'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_YOSHIDA = Quantity(
        type=str,
        shape=[],
        description='''
        order of the yoshida integretor used for the thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.YOSHIDA'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.COORD'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.FORCE'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.MASS'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW(MSection):
    '''
    Specify thermostat type and parameters controlling the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the defined region for slow thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.REGION'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the thermostat used for the constant temperature ensembles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.TYPE'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.DEFINE_REGION'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW.NOSE'))


class x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS(MSection):
    '''
    Parameters used in canonical adiabatic free energy sampling (CAFES).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_N_RESP_FAST = Quantity(
        type=str,
        shape=[],
        description='''
        number of respa steps for fast degrees of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.N_RESP_FAST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_TEMP_FAST = Quantity(
        type=str,
        shape=[],
        description='''
        Temperature in K used to control the fast degrees of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.TEMP_FAST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_TEMP_SLOW = Quantity(
        type=str,
        shape=[],
        description='''
        Temperature in K used to control the slow degrees of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.TEMP_SLOW'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_TEMP_TOL_FAST = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum accepted temperature deviation from the expected value, for the fast
        motion.If 0, no rescaling is performed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.TEMP_TOL_FAST'))

    x_cp2k_input_MOTION_MD_ADIABATIC_DYNAMICS_TEMP_TOL_SLOW = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum accepted temperature deviation from the expected value, for the slow
        motion.If 0, no rescaling is performed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ADIABATIC_DYNAMICS.TEMP_TOL_SLOW'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_FAST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_FAST'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS_THERMOSTAT_SLOW'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS.THERMOSTAT_SLOW'))


class x_cp2k_section_input_MOTION_MD_AVERAGES_PRINT_AVERAGES(MSection):
    '''
    Controls the output the averaged quantities
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES.PRINT_AVERAGES'))

    x_cp2k_input_MOTION_MD_AVERAGES_PRINT_AVERAGES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.PRINT_AVERAGES.ADD_LAST'))

    x_cp2k_input_MOTION_MD_AVERAGES_PRINT_AVERAGES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.PRINT_AVERAGES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_MD_AVERAGES_PRINT_AVERAGES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.PRINT_AVERAGES.FILENAME'))

    x_cp2k_input_MOTION_MD_AVERAGES_PRINT_AVERAGES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.PRINT_AVERAGES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_MD_AVERAGES_PRINT_AVERAGES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.PRINT_AVERAGES.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_MD_AVERAGES_RESTART_AVERAGES(MSection):
    '''
    Stores information for restarting averages.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES.RESTART_AVERAGES'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_COLVARS = Quantity(
        type=str,
        shape=[],
        description='''
        COLVARS averages
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_COLVARS'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_ECONS = Quantity(
        type=str,
        shape=[],
        description='''
        CONSTANT ENERGY average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_ECONS'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_MMATRIX = Quantity(
        type=str,
        shape=[],
        description='''
        METRIC TENSOR averages
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_MMATRIX'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PRESS = Quantity(
        type=str,
        shape=[],
        description='''
        PRESSURE average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PRESS'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_CNSTR = Quantity(
        type=str,
        shape=[],
        description='''
        PV CONSTRAINTS average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_CNSTR'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_FOCK_4C = Quantity(
        type=str,
        shape=[],
        description='''
        PV XC average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_FOCK_4C'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_KIN = Quantity(
        type=str,
        shape=[],
        description='''
        PV KINETIC average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_KIN'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_TOT = Quantity(
        type=str,
        shape=[],
        description='''
        PV TOTAL average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_TOT'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_VIR = Quantity(
        type=str,
        shape=[],
        description='''
        PV VIRIAL average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_VIR'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PV_XC = Quantity(
        type=str,
        shape=[],
        description='''
        PV XC average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PV_XC'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVE_PXX = Quantity(
        type=str,
        shape=[],
        description='''
        P_{XX} average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVE_PXX'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        ALPHA cell angle average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEALPHA'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEBETA = Quantity(
        type=str,
        shape=[],
        description='''
        BETA cell angle average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEBETA'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVECELL_A = Quantity(
        type=str,
        shape=[],
        description='''
        CELL VECTOR A average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVECELL_A'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVECELL_B = Quantity(
        type=str,
        shape=[],
        description='''
        CELL VECTOR B average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVECELL_B'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVECELL_C = Quantity(
        type=str,
        shape=[],
        description='''
        CELL VECTOR C average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVECELL_C'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVECPU = Quantity(
        type=str,
        shape=[],
        description='''
        CPU average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVECPU'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEGAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        GAMMA cell angle average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEGAMMA'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEHUGONIOT = Quantity(
        type=str,
        shape=[],
        description='''
        HUGONIOT average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEHUGONIOT'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEKIN_QM = Quantity(
        type=str,
        shape=[],
        description='''
        QM KINETIC ENERGY average in QMMM runs
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEKIN_QM'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEKIN = Quantity(
        type=str,
        shape=[],
        description='''
        KINETIC ENERGY average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEKIN'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEPOT = Quantity(
        type=str,
        shape=[],
        description='''
        POTENTIAL ENERGY average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEPOT'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVETEMP_BARO = Quantity(
        type=str,
        shape=[],
        description='''
        BAROSTAT TEMPERATURE average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVETEMP_BARO'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVETEMP_QM = Quantity(
        type=str,
        shape=[],
        description='''
        QM TEMPERATURE average in QMMM runs
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVETEMP_QM'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVETEMP = Quantity(
        type=str,
        shape=[],
        description='''
        TEMPERATURE average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVETEMP'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_AVEVOL = Quantity(
        type=str,
        shape=[],
        description='''
        VOLUME average
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.AVEVOL'))

    x_cp2k_input_MOTION_MD_AVERAGES_RESTART_AVERAGES_ITIMES_START = Quantity(
        type=str,
        shape=[],
        description='''
        TIME STEP starting the evaluation of averages
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.RESTART_AVERAGES.ITIMES_START'))


class x_cp2k_section_input_MOTION_MD_AVERAGES(MSection):
    '''
    Controls the calculation of the averages during an MD run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES'))

    x_cp2k_input_MOTION_MD_AVERAGES_ACQUISITION_START_TIME = Quantity(
        type=str,
        shape=[],
        description='''
        Setup up the simulation time when the acquisition process to compute  averages is
        started.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.ACQUISITION_START_TIME'))

    x_cp2k_input_MOTION_MD_AVERAGES_AVERAGE_COLVAR = Quantity(
        type=str,
        shape=[],
        description='''
        Switch for computing the averages of COLVARs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.AVERAGE_COLVAR'))

    x_cp2k_input_MOTION_MD_AVERAGES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the calculations of the averages.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.AVERAGES.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_MD_AVERAGES_PRINT_AVERAGES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_AVERAGES_PRINT_AVERAGES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES.PRINT_AVERAGES'))

    x_cp2k_section_input_MOTION_MD_AVERAGES_RESTART_AVERAGES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_AVERAGES_RESTART_AVERAGES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES.RESTART_AVERAGES'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_MASS(MSection):
    '''
    The masses for BAROSTAT used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.MASS'))

    x_cp2k_input_MOTION_MD_BAROSTAT_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_CHI(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF CHI
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_CHI_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF CHI for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.CHI.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_MASS(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF MASS
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.MASS'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF MASS for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN(MSection):
    '''
    Parameters of the adaptive-Langevin thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_TIMECON_LANGEVIN = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Langevin part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.TIMECON_LANGEVIN'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_TIMECON_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Nose-Hoover part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.TIMECON_NH'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_CHI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_CHI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN.MASS'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR(MSection):
    '''
    Parameters of the canonical sampling through velocity rescaling thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the CSVR thermostat. A small time constant will result in strong
        thermostatting (useful for initial equilibrations) and a large time constant would
        be adequate to get weak thermostatting in production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.TIMECON'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_S(MSection):
    '''
    The s variable for GLE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.S'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_S_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify s variable for GLE thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.S.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE(MSection):
    '''
    paramameters of the gle thermostat. This section can be generated  from https://epfl-
    cosmo.github.io/gle4md/index.html?page=matrix
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_A_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A matrix The defaults give optimal sampling for most cristalline and liquid
        compounds. Generated with the parameters set kv_4-4.acentered on w_0=40 cm^-1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.A_LIST'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_A_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factor for matrix A (for generic matrix A, depends on the characteristic
        frequency of the system).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.A_SCALE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_C_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        C matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.C_LIST'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_NDIM = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the gle matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.NDIM'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_S = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_S'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.S'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_COORD(MSection):
    '''
    The positions for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.COORD'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_FORCE(MSection):
    '''
    The forces for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_MASS(MSection):
    '''
    The masses for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.MASS'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE(MSection):
    '''
    paramameters of the Nose Hoover thermostat chain
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        length of the Nose-Hoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.LENGTH'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_MTS = Quantity(
        type=str,
        shape=[],
        description='''
        number of multiple timesteps to be used for the NoseHoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.MTS'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        timeconstant of the thermostat chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.TIMECON'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_YOSHIDA = Quantity(
        type=str,
        shape=[],
        description='''
        order of the yoshida integretor used for the thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.YOSHIDA'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.COORD'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.MASS'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT(MSection):
    '''
    Specify thermostat type and parameters controlling the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT'))

    x_cp2k_input_MOTION_MD_BAROSTAT_THERMOSTAT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the thermostat used for the constant temperature ensembles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.THERMOSTAT.TYPE'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_AD_LANGEVIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_CSVR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.CSVR'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_GLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.GLE'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT.NOSE'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT_VELOCITY(MSection):
    '''
    The velocities for BAROSTAT used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.VELOCITY'))

    x_cp2k_input_MOTION_MD_BAROSTAT_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_BAROSTAT(MSection):
    '''
    Parameters of barostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT'))

    x_cp2k_input_MOTION_MD_BAROSTAT_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial pressure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.PRESSURE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum oscillation of the Barostat temperature imposed by rescaling.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.TEMP_TOL'))

    x_cp2k_input_MOTION_MD_BAROSTAT_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Barostat initial temperature. If not set, the ensemble temperature is used
        instead.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.TEMPERATURE'))

    x_cp2k_input_MOTION_MD_BAROSTAT_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        Barostat time constant
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.TIMECON'))

    x_cp2k_input_MOTION_MD_BAROSTAT_VIRIAL = Quantity(
        type=str,
        shape=[],
        description='''
        For NPT_F only: allows the screening of one or more components of the virial in
        order to relax the cell only along specific cartesian axis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.BAROSTAT.VIRIAL'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.MASS'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_THERMOSTAT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.THERMOSTAT'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_CASCADE_ATOM_LIST(MSection):
    '''
    Defines a list of atoms for which the initial velocities are modified
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.CASCADE.ATOM_LIST'))

    x_cp2k_input_MOTION_MD_CASCADE_ATOM_LIST_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the list of atoms for which the velocities are modified. Each record
        consists of the atomic index, the velocity vector, and a weight to define which
        fraction of the total energy is assigned to the current
        atom:<p><tt><big>Atomic_index v<sub>x</sub> v<sub>y</sub> v<sub>x</sub>
        Weight</big></tt></p>
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.CASCADE.ATOM_LIST.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_CASCADE(MSection):
    '''
    Defines the parameters for the setup of a cascade simulation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.CASCADE'))

    x_cp2k_input_MOTION_MD_CASCADE_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Total energy transferred to the system during the cascade event.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.CASCADE.ENERGY'))

    x_cp2k_input_MOTION_MD_CASCADE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the activation of the CASCADE section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.CASCADE.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_MD_CASCADE_ATOM_LIST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_CASCADE_ATOM_LIST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.CASCADE.ATOM_LIST'))


class x_cp2k_section_input_MOTION_MD_LANGEVIN(MSection):
    '''
    Controls the set of parameters to run a Langevin MD. The integrator used follows that
    given in the article by Ricci et al. The user can define regions in the system where
    the atoms inside undergoes Langevin MD, while those outside the regions undergoes NVE
    Born Oppenheimer MD. To define the regions, the user should use THERMAL_REGION
    subsection of MOTION%MD. The theory for Langevin MD involving sub-regions can be found
    in articles by Kantorovitch et al. All the references can be found in the links below.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.LANGEVIN'))

    x_cp2k_input_MOTION_MD_LANGEVIN_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Gamma parameter for the Langevin dynamics (LD)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.LANGEVIN.GAMMA'))

    x_cp2k_input_MOTION_MD_LANGEVIN_NOISY_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Imaginary Langevin Friction term for LD with noisy forces.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.LANGEVIN.NOISY_GAMMA'))

    x_cp2k_input_MOTION_MD_LANGEVIN_SHADOW_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Shadow Langevin Friction term for LD with noisy forces in order to adjust
        Noisy_Gamma.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.LANGEVIN.SHADOW_GAMMA'))


class x_cp2k_section_input_MOTION_MD_MSST(MSection):
    '''
    Parameters for Multi-Scale Shock Technique (MSST) which simulate the effect of a
    steady planar shock on a unit cell. Reed et. al. Physical Review Letters 90, 235503
    (2003).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.MSST'))

    x_cp2k_input_MOTION_MD_MSST_CMASS = Quantity(
        type=str,
        shape=[],
        description='''
        Effective cell mass
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.CMASS'))

    x_cp2k_input_MOTION_MD_MSST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Initial energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.ENERGY'))

    x_cp2k_input_MOTION_MD_MSST_GAMMA = Quantity(
        type=str,
        shape=[],
        description='''
        Damping coefficient for cell volume
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.GAMMA'))

    x_cp2k_input_MOTION_MD_MSST_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial pressure
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.PRESSURE'))

    x_cp2k_input_MOTION_MD_MSST_VOLUME = Quantity(
        type=str,
        shape=[],
        description='''
        Initial volume
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.VOLUME'))

    x_cp2k_input_MOTION_MD_MSST_VSHOCK = Quantity(
        type=str,
        shape=[],
        description='''
        Velocity shock
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.MSST.VSHOCK'))


class x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region  for the MSD
    calculation.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION.MM_SUBSYS'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecules to thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION.MOLNAME'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION.QM_SUBSYS'))


class x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD(MSection):
    '''
    Loads an external trajectory file and performs analysis on the loaded snapshots.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ.MSD'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DISPLACED_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Identify the atoms that moved from their initialposition of a distance larger than
        a given tolerance (see msd%displacement_tol).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DISPLACED_ATOM'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_DISPLACEMENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Lower limit to define displaced atoms
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.DISPLACEMENT_TOL'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_MSD_PER_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Set up the calculation of the MSD for each atomic kind
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.MSD_PER_KIND'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_MSD_PER_MOLKIND = Quantity(
        type=str,
        shape=[],
        description='''
        Set up the calculation of the MSD for each molecule kind.The position of the
        center of mass of the molecule is considered.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.MSD_PER_MOLKIND'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_MSD_PER_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Set up the calculation of the MSD for each defined region.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.MSD_PER_REGION'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_REF0_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the filename where the initial reference configuration is stored.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.REF0_FILENAME'))

    x_cp2k_input_MOTION_MD_REFTRAJ_MSD_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        controls the activation of core-level spectroscopy simulations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.MSD.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ.MSD.DEFINE_REGION'))


class x_cp2k_section_input_MOTION_MD_REFTRAJ(MSection):
    '''
    Loads an external trajectory file and performs analysis on the loaded snapshots.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ'))

    x_cp2k_input_MOTION_MD_REFTRAJ_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the filename where the cell is stored (for trajectories generated within
        variable cell ensembles).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.CELL_FILE_NAME'))

    x_cp2k_input_MOTION_MD_REFTRAJ_EVAL_ENERGY_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        Evaluate energy and forces for each retrieved snapshot during a REFTRAJ run
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.EVAL_ENERGY_FORCES'))

    x_cp2k_input_MOTION_MD_REFTRAJ_FIRST_SNAPSHOT = Quantity(
        type=str,
        shape=[],
        description='''
        Index of the snapshot stored in the trajectory file from which to start a REFTRAJ
        run
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.FIRST_SNAPSHOT'))

    x_cp2k_input_MOTION_MD_REFTRAJ_LAST_SNAPSHOT = Quantity(
        type=str,
        shape=[],
        description='''
        Index of the last snapshot stored in the trajectory file that is read along a
        REFTRAJ run
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.LAST_SNAPSHOT'))

    x_cp2k_input_MOTION_MD_REFTRAJ_STRIDE = Quantity(
        type=str,
        shape=[],
        description='''
        Stride in number of snapshot for the  reftraj analysis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.STRIDE'))

    x_cp2k_input_MOTION_MD_REFTRAJ_TRAJ_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the filename where the trajectory is stored.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.TRAJ_FILE_NAME'))

    x_cp2k_input_MOTION_MD_REFTRAJ_VARIABLE_VOLUME = Quantity(
        type=str,
        shape=[],
        description='''
        Enables the possibility to read a CELL file with information on the CELL size
        during the MD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.REFTRAJ.VARIABLE_VOLUME'))

    x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_REFTRAJ_MSD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ.MSD'))


class x_cp2k_section_input_MOTION_MD_RESPA(MSection):
    '''
    Multiple timestep integration based on RESPA (implemented for NVE only). RESPA
    exploits multiple force_eval. In this case the order of the force_eval maps  the order
    of the respa shells from the slowest to the fastest force evaluation. If force_evals
    share the same subsys, it's enough then to specify the  subsys in the force_eval
    corresponding at the first index in the multiple_force_eval list. Can be used to
    speedup classical and ab initio MD simulations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.RESPA'))

    x_cp2k_input_MOTION_MD_RESPA_FREQUENCY = Quantity(
        type=str,
        shape=[],
        description='''
        The number of reference MD steps between two RESPA corrections.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.RESPA.FREQUENCY'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_CHI(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF CHI
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_CHI_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF CHI for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.CHI.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_MASS(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF MASS
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.MASS'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF MASS for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN(MSection):
    '''
    Parameters of the adaptive-Langevin thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_TIMECON_LANGEVIN = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Langevin part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.TIMECON_LANGEVIN'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_TIMECON_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Nose-Hoover part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.TIMECON_NH'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_CHI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_CHI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN.MASS'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR(MSection):
    '''
    Parameters of the canonical sampling through velocity rescaling thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the CSVR thermostat. A small time constant will result in strong
        thermostatting (useful for initial equilibrations) and a large time constant would
        be adequate to get weak thermostatting in production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.TIMECON'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region  for the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION.MM_SUBSYS'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecules to thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION.MOLNAME'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION.QM_SUBSYS'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_S(MSection):
    '''
    The s variable for GLE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.S'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_S_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify s variable for GLE thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.S.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE(MSection):
    '''
    paramameters of the gle thermostat. This section can be generated  from https://epfl-
    cosmo.github.io/gle4md/index.html?page=matrix
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_A_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A matrix The defaults give optimal sampling for most cristalline and liquid
        compounds. Generated with the parameters set kv_4-4.acentered on w_0=40 cm^-1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.A_LIST'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_A_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factor for matrix A (for generic matrix A, depends on the characteristic
        frequency of the system).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.A_SCALE'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_C_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        C matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.C_LIST'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_GLE_NDIM = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the gle matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.GLE.NDIM'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_S = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_S'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.S'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_COORD(MSection):
    '''
    The positions for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.COORD'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_FORCE(MSection):
    '''
    The forces for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_MASS(MSection):
    '''
    The masses for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.MASS'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE(MSection):
    '''
    paramameters of the Nose Hoover thermostat chain
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        length of the Nose-Hoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.LENGTH'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_MTS = Quantity(
        type=str,
        shape=[],
        description='''
        number of multiple timesteps to be used for the NoseHoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.MTS'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        timeconstant of the thermostat chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.TIMECON'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_YOSHIDA = Quantity(
        type=str,
        shape=[],
        description='''
        order of the yoshida integretor used for the thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.YOSHIDA'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.COORD'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.MASS'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT(MSection):
    '''
    Specify thermostat type and parameters controlling the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the region each thermostat is attached to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.REGION'))

    x_cp2k_input_MOTION_MD_SHELL_THERMOSTAT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the thermostat used for the constant temperature ensembles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.THERMOSTAT.TYPE'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_AD_LANGEVIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_CSVR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.CSVR'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.DEFINE_REGION'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_GLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.GLE'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT.NOSE'))


class x_cp2k_section_input_MOTION_MD_SHELL(MSection):
    '''
    Parameters of shell model in adiabatic dynamics.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL'))

    x_cp2k_input_MOTION_MD_SHELL_DISPLACEMENT_SHELL_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword sets a maximum variation of the shell core distance in each Cartesian
        direction.The maximum internal core-shell velocity is evaluated and if it is too
        large to remainwithin the assigned limit, the time step is rescaled
        accordingly,and the first half step of the velocity verlet is repeated.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.DISPLACEMENT_SHELL_TOL'))

    x_cp2k_input_MOTION_MD_SHELL_NOSE_PARTICLE = Quantity(
        type=str,
        shape=[],
        description='''
        If nvt or npt, the core and shell velocities are controlled by the same thermostat
        used for the particle. This might favour heat exchange and additional rescaling of
        the internal core-shell velocity is needed (TEMP_TOL)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.NOSE_PARTICLE'))

    x_cp2k_input_MOTION_MD_SHELL_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum accepted temperature deviation from the expected value, for the internal
        core-shell motion.If 0, no rescaling is performed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.TEMP_TOL'))

    x_cp2k_input_MOTION_MD_SHELL_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        Temperature in K used to control the internal velocities of the core-shell motion
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SHELL.TEMPERATURE'))

    x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL_THERMOSTAT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL.THERMOSTAT'))


class x_cp2k_section_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION_DO_LANGEVIN = Quantity(
        type=str,
        shape=[],
        description='''
        When ENSEMBLE is set to LANGEVIN, Controls whether the atoms in the thermal region
        should undergo Langevin MD. If not, then they will undergo NVE Born-Oppenheimer
        MD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION.DO_LANGEVIN'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms belonging to the region.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum accepted temperature deviation from the expected value for this region. If
        temp_tol=0 no rescaling is performed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION.TEMP_TOL'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        The temperature in K used to initialize the velocities of the atoms in this region
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION.TEMPERATURE'))


class x_cp2k_section_input_MOTION_MD_THERMAL_REGION(MSection):
    '''
    Define regions where different initialization and control of the temperature is used.
    When MOTION%MD%ENSEMBLE is set to LANGEVIN, this section controls if the atoms defined
    inside and outside the thermal regions should undergo Langevin MD or NVE Born-
    Oppenheimer MD. The theory behind Langevin MD using different regions can be found in
    articles by Kantorovitch et al. listed below.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMAL_REGION'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_DO_LANGEVIN_DEFAULT = Quantity(
        type=str,
        shape=[],
        description='''
        If ENSEMBLE is set to LANGEVIN, controls whether the atoms NOT defined in the
        thermal regions to undergo langevin MD or not. If not, then the atoms will undergo
        NVE Born-Oppenheimer MD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.DO_LANGEVIN_DEFAULT'))

    x_cp2k_input_MOTION_MD_THERMAL_REGION_FORCE_RESCALING = Quantity(
        type=str,
        shape=[],
        description='''
        Control the rescaling ot the velocities in all the regions, according to the
        temperature assigned to each reagion, when RESTART_VELOCITY in EXT_RESTART is
        active.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMAL_REGION.FORCE_RESCALING'))

    x_cp2k_section_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMAL_REGION_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMAL_REGION.DEFINE_REGION'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_CHI(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF CHI
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_CHI_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF CHI for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.CHI.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_MASS(MSection):
    '''
    Information to initialize the Ad-Langevin thermostat DOF MASS
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.MASS'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat DOF MASS for Ad-Langevin thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN(MSection):
    '''
    Parameters of the adaptive-Langevin thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_TIMECON_LANGEVIN = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Langevin part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.TIMECON_LANGEVIN'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_TIMECON_NH = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the Nose-Hoover part of the AD_LANGEVIN thermostat. A small time
        constant will result in strong thermostatting (useful for initial equilibrations)
        and a large time constant would be adequate to get weak thermostatting in
        production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.TIMECON_NH'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_CHI = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_CHI'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.CHI'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN.MASS'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_CSVR_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.CSVR.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_CSVR_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.CSVR.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR(MSection):
    '''
    Parameters of the canonical sampling through velocity rescaling thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_CSVR_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        Time constant of the CSVR thermostat. A small time constant will result in strong
        thermostatting (useful for initial equilibrations) and a large time constant would
        be adequate to get weak thermostatting in production runs.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.CSVR.TIMECON'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_DEFINE_REGION(MSection):
    '''
    This section provides the possibility to define arbitrary region  for the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.DEFINE_REGION'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_DEFINE_REGION_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies a list of atoms to thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.DEFINE_REGION.LIST'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_DEFINE_REGION_MM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all  MM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.DEFINE_REGION.MM_SUBSYS'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_DEFINE_REGION_MOLNAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the molecules to thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.DEFINE_REGION.MOLNAME'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_DEFINE_REGION_QM_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        In a QM/MM run all QM atoms are specified as a whole ensemble to be thermostated
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.DEFINE_REGION.QM_SUBSYS'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_S(MSection):
    '''
    The s variable for GLE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.S'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_S_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify s variable for GLE thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.S.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE(MSection):
    '''
    paramameters of the gle thermostat. This section can be generated  from https://epfl-
    cosmo.github.io/gle4md/index.html?page=matrix
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_A_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A matrix The defaults give optimal sampling for most cristalline and liquid
        compounds. Generated with the parameters set kv_4-4.acentered on w_0=40 cm^-1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.A_LIST'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_A_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factor for matrix A (for generic matrix A, depends on the characteristic
        frequency of the system).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.A_SCALE'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_C_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        C matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.C_LIST'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_GLE_NDIM = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the gle matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.GLE.NDIM'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.RNG_INIT'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_S = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_S'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.S'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_COORD(MSection):
    '''
    The positions for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.COORD'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_FORCE(MSection):
    '''
    The forces for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_MASS(MSection):
    '''
    The masses for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.MASS'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_MASS_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify masses of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.MASS.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE HOOVER used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE(MSection):
    '''
    paramameters of the Nose Hoover thermostat chain
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        length of the Nose-Hoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.LENGTH'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_MTS = Quantity(
        type=str,
        shape=[],
        description='''
        number of multiple timesteps to be used for the NoseHoover chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.MTS'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_TIMECON = Quantity(
        type=str,
        shape=[],
        description='''
        timeconstant of the thermostat chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.TIMECON'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_NOSE_YOSHIDA = Quantity(
        type=str,
        shape=[],
        description='''
        order of the yoshida integretor used for the thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.NOSE.YOSHIDA'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.COORD'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.FORCE'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_MASS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_MASS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.MASS'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_MD_THERMOSTAT(MSection):
    '''
    Specify thermostat type and parameters controlling the thermostat.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_REGION = Quantity(
        type=str,
        shape=[],
        description='''
        Determines the region each thermostat is attached to.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.REGION'))

    x_cp2k_input_MOTION_MD_THERMOSTAT_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the thermostat used for the constant temperature ensembles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.THERMOSTAT.TYPE'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_AD_LANGEVIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.AD_LANGEVIN'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_CSVR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.CSVR'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_DEFINE_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_DEFINE_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.DEFINE_REGION'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_GLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.GLE'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT.NOSE'))


class x_cp2k_section_input_MOTION_MD_VELOCITY_SOFTENING(MSection):
    '''
    A method to initialize the velocities along low-curvature directions in order to
    favors MD trajectories to cross rapidly over small energy barriers into neighboring
    basins. In each iteration the forces are calculated at a point y, which is slightly
    displaced from the current positions x in the direction of the original velocities v.
    The velocities are then updated with the force component F_t, which is perpendicular
    to N. N = v / |v|;  y = x + delta * N;  F_t = F(y) - 〈 F(y) | N 〉 * N; v' = v + alpha
    * F_t
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.VELOCITY_SOFTENING'))

    x_cp2k_input_MOTION_MD_VELOCITY_SOFTENING_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Mixing factor used for updating velocities.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.VELOCITY_SOFTENING.ALPHA'))

    x_cp2k_input_MOTION_MD_VELOCITY_SOFTENING_DELTA = Quantity(
        type=str,
        shape=[],
        description='''
        Displacement used to obtain y.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.VELOCITY_SOFTENING.DELTA'))

    x_cp2k_input_MOTION_MD_VELOCITY_SOFTENING_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of softening iterations performed. Typical values are around 40 steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.VELOCITY_SOFTENING.STEPS'))


class x_cp2k_section_input_MOTION_MD(MSection):
    '''
    This section defines the whole set of parameters needed perform an MD run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD'))

    x_cp2k_input_MOTION_MD_ANGVEL_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum accepted angular velocity. This option is ignored when the system is
        periodic. Removes the components of the velocities thatproject on the external
        rotational degrees of freedom.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ANGVEL_TOL'))

    x_cp2k_input_MOTION_MD_ANGVEL_ZERO = Quantity(
        type=str,
        shape=[],
        description='''
        Set the initial angular velocity to zero. This option is ignored when the system
        is periodic or when initial velocities are defined. Technically, the part of the
        random initial velocities that projects on the external rotational degrees of
        freedom is subtracted.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ANGVEL_ZERO'))

    x_cp2k_input_MOTION_MD_ANNEALING_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the rescaling factor for annealing velocities of the CELL Automatically
        enables the annealing procedure for the CELL. This scheme works only for ensambles
        that do not have thermostat on CELLS velocities.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ANNEALING_CELL'))

    x_cp2k_input_MOTION_MD_ANNEALING = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the rescaling factor for annealing velocities. Automatically enables the
        annealing procedure. This scheme works only for ensembles that do not have
        thermostats on particles.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ANNEALING'))

    x_cp2k_input_MOTION_MD_COMVEL_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum accepted velocity of the center of mass. With Shell-Model, comvel may
        drift if MD%THERMOSTAT%REGION /= GLOBAL
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.COMVEL_TOL'))

    x_cp2k_input_MOTION_MD_DISPLACEMENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword sets a maximum atomic displacement  in each Cartesian direction.The
        maximum velocity is evaluated and if it is too large to remainwithin the assigned
        limit, the time step is rescaled accordingly,and the first half step of the
        velocity verlet is repeated.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.DISPLACEMENT_TOL'))

    x_cp2k_input_MOTION_MD_ECONS_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting  value of the conserved quantity
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ECONS_START_VAL'))

    x_cp2k_input_MOTION_MD_ENSEMBLE = Quantity(
        type=str,
        shape=[],
        description='''
        The ensemble/integrator that you want to use for MD propagation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.ENSEMBLE'))

    x_cp2k_input_MOTION_MD_SCALE_TEMP_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        When necessary rescale the temperature per each kind separately
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.SCALE_TEMP_KIND'))

    x_cp2k_input_MOTION_MD_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for the MD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.STEP_START_VAL'))

    x_cp2k_input_MOTION_MD_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        The number of MD steps to perform
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.STEPS'))

    x_cp2k_input_MOTION_MD_TEMP_KIND = Quantity(
        type=str,
        shape=[],
        description='''
        Compute the temperature per each kind separately
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.TEMP_KIND'))

    x_cp2k_input_MOTION_MD_TEMP_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum accepted deviation of the (global) temperaturefrom the desired target
        temperature before a rescaling of the velocites is performed. If it is 0 no
        rescaling is performed. NOTE: This keyword is obsolescent; Using a CSVR thermostat
        with a short timeconstant is recommended as a better alternative.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.TEMP_TOL'))

    x_cp2k_input_MOTION_MD_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        The temperature in K used to initialize the velocities with init and pos restart,
        and in the NPT/NVT simulations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.TEMPERATURE'))

    x_cp2k_input_MOTION_MD_TIME_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting timer value for the MD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.TIME_START_VAL'))

    x_cp2k_input_MOTION_MD_TIMESTEP = Quantity(
        type=str,
        shape=[],
        description='''
        The length of an integration step (in case RESPA the large TIMESTEP)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.MD.TIMESTEP'))

    x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_ADIABATIC_DYNAMICS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.ADIABATIC_DYNAMICS'))

    x_cp2k_section_input_MOTION_MD_AVERAGES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_AVERAGES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.AVERAGES'))

    x_cp2k_section_input_MOTION_MD_BAROSTAT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_BAROSTAT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.BAROSTAT'))

    x_cp2k_section_input_MOTION_MD_CASCADE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_CASCADE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.CASCADE'))

    x_cp2k_section_input_MOTION_MD_LANGEVIN = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_LANGEVIN'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.LANGEVIN'))

    x_cp2k_section_input_MOTION_MD_MSST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_MSST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.MSST'))

    x_cp2k_section_input_MOTION_MD_REFTRAJ = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_REFTRAJ'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.REFTRAJ'))

    x_cp2k_section_input_MOTION_MD_RESPA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_RESPA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.RESPA'))

    x_cp2k_section_input_MOTION_MD_SHELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_SHELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.SHELL'))

    x_cp2k_section_input_MOTION_MD_THERMAL_REGION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMAL_REGION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMAL_REGION'))

    x_cp2k_section_input_MOTION_MD_THERMOSTAT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_THERMOSTAT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.THERMOSTAT'))

    x_cp2k_section_input_MOTION_MD_VELOCITY_SOFTENING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD_VELOCITY_SOFTENING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD.VELOCITY_SOFTENING'))


class x_cp2k_section_input_MOTION_PINT_BEADS_COORD(MSection):
    '''
    The positions for BEADS used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS.COORD'))

    x_cp2k_input_MOTION_PINT_BEADS_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.BEADS.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_BEADS_VELOCITY(MSection):
    '''
    The velocities for BEADS used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS.VELOCITY'))

    x_cp2k_input_MOTION_PINT_BEADS_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.BEADS.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_BEADS(MSection):
    '''
    Sets positions and velocities of the beads
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS'))

    x_cp2k_section_input_MOTION_PINT_BEADS_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_BEADS_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS.COORD'))

    x_cp2k_section_input_MOTION_PINT_BEADS_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_BEADS_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS.VELOCITY'))


class x_cp2k_section_input_MOTION_PINT_GLE_RNG_INIT(MSection):
    '''
    Information to initialize the parallel random number generator streams
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.RNG_INIT'))

    x_cp2k_input_MOTION_PINT_GLE_RNG_INIT_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial RNG stream record
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.RNG_INIT.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_GLE_S(MSection):
    '''
    The s variable for GLE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.S'))

    x_cp2k_input_MOTION_PINT_GLE_S_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify s variable for GLE thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.S.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_GLE_THERMOSTAT_ENERGY(MSection):
    '''
    Information to initialize the CSVR thermostat energy.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.THERMOSTAT_ENERGY'))

    x_cp2k_input_MOTION_PINT_GLE_THERMOSTAT_ENERGY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify an initial thermostat energy for CSVR thermostat.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.THERMOSTAT_ENERGY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_GLE(MSection):
    '''
    paramameters of the gle thermostat. This section can be generated  from https://epfl-
    cosmo.github.io/gle4md/index.html?page=matrix
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE'))

    x_cp2k_input_MOTION_PINT_GLE_A_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        A matrix The defaults give optimal sampling for most cristalline and liquid
        compounds. Generated with the parameters set kv_4-4.acentered on w_0=40 cm^-1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.A_LIST'))

    x_cp2k_input_MOTION_PINT_GLE_A_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scaling factor for matrix A (for generic matrix A, depends on the characteristic
        frequency of the system).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.A_SCALE'))

    x_cp2k_input_MOTION_PINT_GLE_C_LIST = Quantity(
        type=str,
        shape=[],
        description='''
        C matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.C_LIST'))

    x_cp2k_input_MOTION_PINT_GLE_NDIM = Quantity(
        type=str,
        shape=[],
        description='''
        Size of the gle matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.GLE.NDIM'))

    x_cp2k_section_input_MOTION_PINT_GLE_RNG_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_GLE_RNG_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.RNG_INIT'))

    x_cp2k_section_input_MOTION_PINT_GLE_S = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_GLE_S'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.S'))

    x_cp2k_section_input_MOTION_PINT_GLE_THERMOSTAT_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_GLE_THERMOSTAT_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE.THERMOSTAT_ENERGY'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_COORD(MSection):
    '''
    The positions for HELIUM used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.COORD'))

    x_cp2k_input_MOTION_PINT_HELIUM_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_FORCE(MSection):
    '''
    Forces exerted by the helium on the solute system (used for restarts)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.FORCE'))

    x_cp2k_input_MOTION_PINT_HELIUM_FORCE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Number of real values should be 3 * <num_solute_atoms> * <num_solute_beads>
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.FORCE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_M_SAMPLING(MSection):
    '''
    Permutation cycle length sampling settings
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.M-SAMPLING'))

    x_cp2k_input_MOTION_PINT_HELIUM_M_SAMPLING_M_RATIO = Quantity(
        type=str,
        shape=[],
        description='''
        Probability ratio betw M-VALUE and other cycle lengths
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.M-SAMPLING.M-RATIO'))

    x_cp2k_input_MOTION_PINT_HELIUM_M_SAMPLING_M_VALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Value of m treated in a special way
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.M-SAMPLING.M-VALUE'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_PERM(MSection):
    '''
    Permutation state used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.PERM'))

    x_cp2k_input_MOTION_PINT_HELIUM_PERM_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify particle index permutation for every helium atom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.PERM.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_RDF(MSection):
    '''
    Radial distribution function generation settings
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RDF'))

    x_cp2k_input_MOTION_PINT_HELIUM_RDF_MAXR = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum RDF range, defaults to unit cell size
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RDF.MAXR'))

    x_cp2k_input_MOTION_PINT_HELIUM_RDF_NBIN = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RDF.NBIN'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_RHO_CUBE_DATA(MSection):
    '''
    Density data used for restarts
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RHO.CUBE_DATA'))

    x_cp2k_input_MOTION_PINT_HELIUM_RHO_CUBE_DATA_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Cubefile data
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RHO.CUBE_DATA.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_RHO(MSection):
    '''
    Density distribution settings
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RHO'))

    x_cp2k_input_MOTION_PINT_HELIUM_RHO_IWEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        Weight the restarted density should be given (number of MC steps used to average
        the restarted density, negative value - the same weight as the run-time density,
        usually should not be changed)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RHO.IWEIGHT'))

    x_cp2k_input_MOTION_PINT_HELIUM_RHO_NBIN = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bins
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RHO.NBIN'))

    x_cp2k_input_MOTION_PINT_HELIUM_RHO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Whether or not to actually calculate densities (requires significant amount of
        memory, depending on the value of NBIN)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RHO.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_RHO_CUBE_DATA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_RHO_CUBE_DATA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RHO.CUBE_DATA'))


class x_cp2k_section_input_MOTION_PINT_HELIUM_RNG_STATE(MSection):
    '''
    Random number generator state for all processors
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RNG_STATE'))

    x_cp2k_input_MOTION_PINT_HELIUM_RNG_STATE_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Three real arrays of DIMENSION(3,2) times two RNG streams - 36 real values per
        processor
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.RNG_STATE.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_HELIUM(MSection):
    '''
    The section that controls optional helium solvent environment (highly experimental,
    not for general use yet)
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM'))

    x_cp2k_input_MOTION_PINT_HELIUM_BISECTION = Quantity(
        type=str,
        shape=[],
        description='''
        how many time slices to change at once (+1). Must be a power of 2 currently
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.BISECTION'))

    x_cp2k_input_MOTION_PINT_HELIUM_CELL_SHAPE = Quantity(
        type=str,
        shape=[],
        description='''
        PBC unit cell shape for helium
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.CELL_SHAPE'))

    x_cp2k_input_MOTION_PINT_HELIUM_CELL_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        PBC unit cell size (NOTE 1: density, number of atoms and volume are interdependent
        - give only two of them; NOTE 2: for small cell sizes specify NATOMS instead)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.CELL_SIZE'))

    x_cp2k_input_MOTION_PINT_HELIUM_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        trial density of helium for determining the helium box size
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.DENSITY'))

    x_cp2k_input_MOTION_PINT_HELIUM_DROP_UNUSED_ENVS = Quantity(
        type=str,
        shape=[],
        description='''
        Drop He environments if N_restart > N_runtime (Warning: this will cause data loss
        in the restart file!)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.DROP_UNUSED_ENVS'))

    x_cp2k_input_MOTION_PINT_HELIUM_HELIUM_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        Simulate helium solvent only, disregard solute entirely
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.HELIUM_ONLY'))

    x_cp2k_input_MOTION_PINT_HELIUM_INOROT = Quantity(
        type=str,
        shape=[],
        description='''
        Number of MC iterations at the same time slice(s)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.INOROT'))

    x_cp2k_input_MOTION_PINT_HELIUM_IROT = Quantity(
        type=str,
        shape=[],
        description='''
        how often to reselect the time slice(s) to work on
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.IROT'))

    x_cp2k_input_MOTION_PINT_HELIUM_MAX_PERM_CYCLE = Quantity(
        type=str,
        shape=[],
        description='''
        how large cyclic permutations to try
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.MAX_PERM_CYCLE'))

    x_cp2k_input_MOTION_PINT_HELIUM_NATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of helium atoms
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.NATOMS'))

    x_cp2k_input_MOTION_PINT_HELIUM_NBEADS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of helium path integral beads
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.NBEADS'))

    x_cp2k_input_MOTION_PINT_HELIUM_NUM_ENV = Quantity(
        type=str,
        shape=[],
        description='''
        Number of independent helium environments (only for restarts, do not set
        explicitly)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.NUM_ENV'))

    x_cp2k_input_MOTION_PINT_HELIUM_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Use periodic boundary conditions for helium
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.PERIODIC'))

    x_cp2k_input_MOTION_PINT_HELIUM_POTENTIAL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the Helium interaction potential file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.POTENTIAL_FILE_NAME'))

    x_cp2k_input_MOTION_PINT_HELIUM_PRESAMPLE = Quantity(
        type=str,
        shape=[],
        description='''
        Presample He coordinates before first PIMD step
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.PRESAMPLE'))

    x_cp2k_input_MOTION_PINT_HELIUM_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Whether or not to actually use this section
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.HELIUM.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.COORD'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_FORCE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_FORCE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.FORCE'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_M_SAMPLING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_M_SAMPLING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.M-SAMPLING'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_PERM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_PERM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.PERM'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_RDF = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_RDF'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RDF'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_RHO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_RHO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RHO'))

    x_cp2k_section_input_MOTION_PINT_HELIUM_RNG_STATE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM_RNG_STATE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM.RNG_STATE'))


class x_cp2k_section_input_MOTION_PINT_INIT(MSection):
    '''
    Controls the initialization if the beads are not present
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.INIT'))

    x_cp2k_input_MOTION_PINT_INIT_CENTROID_SPEED = Quantity(
        type=str,
        shape=[],
        description='''
        adds random velocity component to the centroid modes (useful to correct for the
        averaging out of the speed of various beads)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.CENTROID_SPEED'))

    x_cp2k_input_MOTION_PINT_INIT_LEVY_CORRELATED = Quantity(
        type=str,
        shape=[],
        description='''
        Use the same Levy path for all atoms, though with mass-dependent variances (might
        help at very low T)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.LEVY_CORRELATED'))

    x_cp2k_input_MOTION_PINT_INIT_LEVY_POS_SAMPLE = Quantity(
        type=str,
        shape=[],
        description='''
        Sample bead positions assuming free particle behavior (performs a Levy random walk
        of length P around the classical position of each atom at the physical temperature
        defined in PINT%TEMP)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.LEVY_POS_SAMPLE'))

    x_cp2k_input_MOTION_PINT_INIT_LEVY_SEED = Quantity(
        type=str,
        shape=[],
        description='''
        Initial seed for the (pseudo)random number generator that controls Levy walk for
        bead positions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.LEVY_SEED'))

    x_cp2k_input_MOTION_PINT_INIT_LEVY_TEMP_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Multiplicative correction factor for the temperature at which the Levy walk is
        performed (correction is due to the interactions that modify the spread of a free
        particle)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.LEVY_TEMP_FACTOR'))

    x_cp2k_input_MOTION_PINT_INIT_RANDOMIZE_POS = Quantity(
        type=str,
        shape=[],
        description='''
        add gaussian noise to the positions of the beads
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.RANDOMIZE_POS'))

    x_cp2k_input_MOTION_PINT_INIT_VELOCITY_QUENCH = Quantity(
        type=str,
        shape=[],
        description='''
        set the initial velocities to zero
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.VELOCITY_QUENCH'))

    x_cp2k_input_MOTION_PINT_INIT_VELOCITY_SCALE = Quantity(
        type=str,
        shape=[],
        description='''
        scale initial velocities to the temperature given in MOTION%PINT%TEMP
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.INIT.VELOCITY_SCALE'))


class x_cp2k_section_input_MOTION_PINT_NORMALMODE(MSection):
    '''
    Controls the normal mode transformation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NORMALMODE'))

    x_cp2k_input_MOTION_PINT_NORMALMODE_MODEFACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        mass scale factor for non-centroid degrees of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NORMALMODE.MODEFACTOR'))

    x_cp2k_input_MOTION_PINT_NORMALMODE_Q_BEAD = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the thermostat mass of non-centroid degrees of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NORMALMODE.Q_BEAD'))

    x_cp2k_input_MOTION_PINT_NORMALMODE_Q_CENTROID = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the thermostat mass of centroid degree of freedom
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NORMALMODE.Q_CENTROID'))


class x_cp2k_section_input_MOTION_PINT_NOSE_COORD(MSection):
    '''
    The positions for NOSE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE.COORD'))

    x_cp2k_input_MOTION_PINT_NOSE_COORD_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify positions of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NOSE.COORD.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_NOSE_VELOCITY(MSection):
    '''
    The velocities for NOSE used for restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE.VELOCITY'))

    x_cp2k_input_MOTION_PINT_NOSE_VELOCITY_DEFAULT_KEYWORD = Quantity(
        type=str,
        shape=[],
        description='''
        Specify velocities of the system
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NOSE.VELOCITY.DEFAULT_KEYWORD'))


class x_cp2k_section_input_MOTION_PINT_NOSE(MSection):
    '''
    Controls the Nose-Hoover thermostats
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE'))

    x_cp2k_input_MOTION_PINT_NOSE_NNOS = Quantity(
        type=str,
        shape=[],
        description='''
        length of nose-hoover chain. 0 means no thermostat
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NOSE.NNOS'))

    x_cp2k_section_input_MOTION_PINT_NOSE_COORD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_NOSE_COORD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE.COORD'))

    x_cp2k_section_input_MOTION_PINT_NOSE_VELOCITY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_NOSE_VELOCITY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE.VELOCITY'))


class x_cp2k_section_input_MOTION_PINT_STAGING(MSection):
    '''
    The section that controls the staging transformation
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.STAGING'))

    x_cp2k_input_MOTION_PINT_STAGING_J = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the j parameter for the staging transformation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.STAGING.J'))

    x_cp2k_input_MOTION_PINT_STAGING_Q_END = Quantity(
        type=str,
        shape=[],
        description='''
        Value of the nose-hoover mass for the endbead (Q_end)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.STAGING.Q_END'))


class x_cp2k_section_input_MOTION_PINT(MSection):
    '''
    The section that controls a path integral run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT'))

    x_cp2k_input_MOTION_PINT_DT = Quantity(
        type=str,
        shape=[],
        description='''
        timestep (might be subdivised in nrespa subtimesteps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.DT'))

    x_cp2k_input_MOTION_PINT_FIX_CENTROID_POS = Quantity(
        type=str,
        shape=[],
        description='''
        Propagate all DOF but the centroid - useful for equilibration of the non-centroid
        modes (activated only if TRANSFORMATION==NORMAL)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.FIX_CENTROID_POS'))

    x_cp2k_input_MOTION_PINT_ITERATION = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the iteration number from which it should be counted
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.ITERATION'))

    x_cp2k_input_MOTION_PINT_MAX_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum step number (the program will stop if ITERATION >= MAX_STEP even if
        NUM_STEPS has not been reached)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.MAX_STEP'))

    x_cp2k_input_MOTION_PINT_NRESPA = Quantity(
        type=str,
        shape=[],
        description='''
        number of respa steps for the bead for each md step
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NRESPA'))

    x_cp2k_input_MOTION_PINT_NUM_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of steps (if MAX_STEP is not explicitly given the program will perform this
        number of steps)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.NUM_STEPS'))

    x_cp2k_input_MOTION_PINT_PROC_PER_REPLICA = Quantity(
        type=str,
        shape=[],
        description='''
        Specify number of processors to use for each replica
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.PROC_PER_REPLICA'))

    x_cp2k_input_MOTION_PINT_P = Quantity(
        type=str,
        shape=[],
        description='''
        Specify number beads to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.P'))

    x_cp2k_input_MOTION_PINT_T_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        threshold for the oscillations of the temperature excedeed which the temperature
        is rescaled. 0 means no rescaling.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.T_TOL'))

    x_cp2k_input_MOTION_PINT_TEMP = Quantity(
        type=str,
        shape=[],
        description='''
        The temperature you want to simulate
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.TEMP'))

    x_cp2k_input_MOTION_PINT_TRANSFORMATION = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the coordinate transformation to use
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PINT.TRANSFORMATION'))

    x_cp2k_section_input_MOTION_PINT_BEADS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_BEADS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.BEADS'))

    x_cp2k_section_input_MOTION_PINT_GLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_GLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.GLE'))

    x_cp2k_section_input_MOTION_PINT_HELIUM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_HELIUM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.HELIUM'))

    x_cp2k_section_input_MOTION_PINT_INIT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_INIT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.INIT'))

    x_cp2k_section_input_MOTION_PINT_NORMALMODE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_NORMALMODE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NORMALMODE'))

    x_cp2k_section_input_MOTION_PINT_NOSE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_NOSE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.NOSE'))

    x_cp2k_section_input_MOTION_PINT_STAGING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT_STAGING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT.STAGING'))


class x_cp2k_section_input_MOTION_PRINT_CELL_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CELL.EACH'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_CELL_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_CELL(MSection):
    '''
    Controls the output of the simulation cell. For later analysis of the trajectory it is
    recommendable that the frequency of printing is the same as the one used for the
    trajectory file.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CELL'))

    x_cp2k_input_MOTION_PRINT_CELL_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_CELL_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_CELL_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.FILENAME'))

    x_cp2k_input_MOTION_PRINT_CELL_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_CELL_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CELL.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_CELL_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CELL_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CELL.EACH'))


class x_cp2k_section_input_MOTION_PRINT_CORE_FORCES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_FORCES.EACH'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_CORE_FORCES(MSection):
    '''
    controls the output of the forces on cores when shell-model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_FORCES'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the forces on cores.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_CORE_FORCES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_FORCES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_CORE_FORCES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_FORCES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_FORCES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_TRAJECTORY.EACH'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY(MSection):
    '''
    Controls the output of the trajectory of cores when the shell-model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_TRAJECTORY'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_CHARGE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the BETA field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.CHARGE_BETA'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_CHARGE_EXTENDED = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the very last field of the PDB file (starting from column
        81)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.CHARGE_EXTENDED'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_CHARGE_OCCUP = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the OCCUP field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.CHARGE_OCCUP'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.FILENAME'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the trajectory of cores.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.FORMAT'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_CORE_TRAJECTORY_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_TRAJECTORY.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_TRAJECTORY.EACH'))


class x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_VELOCITIES.EACH'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES(MSection):
    '''
    controls the output of the velocities of cores when the shell model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_VELOCITIES'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the velocities of cores.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_CORE_VELOCITIES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.CORE_VELOCITIES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_VELOCITIES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS(MSection):
    '''
    Controls the output of the force mixing (FORCE_EVAL&QMMM&FORCE_MIXING) labels
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCE_MIXING_LABELS'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.FILENAME'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the force mixing labels.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.FORMAT'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_FORCE_MIXING_LABELS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCE_MIXING_LABELS.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCE_MIXING_LABELS.EACH'))


class x_cp2k_section_input_MOTION_PRINT_FORCES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCES.EACH'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_FORCES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_FORCES(MSection):
    '''
    Controls the output of the forces
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCES'))

    x_cp2k_input_MOTION_PRINT_FORCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_FORCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_FORCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_FORCES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the forces.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_FORCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_FORCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_FORCES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.FORCES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_FORCES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_FORCES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.MIXED_ENERGIES.EACH'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES(MSection):
    '''
    Controls the output of the energies of the tworegular FORCE_EVALS in the MIXED
    methodprinted is step,time,Etot,E_F1,E_F2,CONS_QNT
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.MIXED_ENERGIES'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_MIXED_ENERGIES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.MIXED_ENERGIES.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.MIXED_ENERGIES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_RESTART_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART.EACH'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_RESTART_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART_HISTORY.EACH'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY(MSection):
    '''
    Dumps unique restart files during the run keeping all of them.Most useful if recovery
    is needed at a later point.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART_HISTORY'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.FILENAME'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_RESTART_HISTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART_HISTORY.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART_HISTORY.EACH'))


class x_cp2k_section_input_MOTION_PRINT_RESTART(MSection):
    '''
    Controls the dumping of the restart file during runs. By default keeps a short history
    of three restarts. See also RESTART_HISTORY
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART'))

    x_cp2k_input_MOTION_PRINT_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_RESTART_BACKUP_COPIES = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of backup copies.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.BACKUP_COPIES'))

    x_cp2k_input_MOTION_PRINT_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.FILENAME'))

    x_cp2k_input_MOTION_PRINT_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_RESTART_SPLIT_RESTART_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        If specified selected input sections, which are growing with the number of atoms
        in the system, are written to another restart file in binary format instead of the
        default restart file in human readable ASCII format. This split of the restart
        file may provide significant memory savings and an accelerated I/O for systems
        with a very large number of atoms
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.RESTART.SPLIT_RESTART_FILE'))

    x_cp2k_section_input_MOTION_PRINT_RESTART_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_RESTART_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART.EACH'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_FORCES.EACH'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES(MSection):
    '''
    controls the output of the forces on shells when shell-model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_FORCES'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the forces on shells.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_SHELL_FORCES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_FORCES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_FORCES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY(MSection):
    '''
    Controls the output of the trajectory of shells when the shell-model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_TRAJECTORY'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_CHARGE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the BETA field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.CHARGE_BETA'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_CHARGE_EXTENDED = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the very last field of the PDB file (starting from column
        81)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.CHARGE_EXTENDED'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_CHARGE_OCCUP = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the OCCUP field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.CHARGE_OCCUP'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.FILENAME'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the trajectory of shells.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.FORMAT'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_SHELL_TRAJECTORY_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_TRAJECTORY.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_TRAJECTORY.EACH'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_VELOCITIES.EACH'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES(MSection):
    '''
    Controls the output of the velocities of shells when the shell model is used
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_VELOCITIES'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the velocities of shells.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_SHELL_VELOCITIES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.SHELL_VELOCITIES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_VELOCITIES.EACH'))


class x_cp2k_section_input_MOTION_PRINT_STRESS_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRESS.EACH'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_STRESS_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_STRESS(MSection):
    '''
    Controls the output of the stress tensor
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRESS'))

    x_cp2k_input_MOTION_PRINT_STRESS_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_STRESS_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_STRESS_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.FILENAME'))

    x_cp2k_input_MOTION_PRINT_STRESS_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_STRESS_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRESS.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_STRESS_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_STRESS_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRESS.EACH'))


class x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRUCTURE_DATA.EACH'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA(MSection):
    '''
    Request the printing of special structure data during a structure optimization (in
    MOTION%PRINT) or when setting up a subsys (in SUBSYS%PRINT).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRUCTURE_DATA'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_ANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Print the angle formed by the atoms specified by their indices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.ANGLE'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_DIHEDRAL_ANGLE = Quantity(
        type=str,
        shape=[],
        description='''
        Print the dihedral angle between the planes defined by the atoms (a,b,c) and the
        atoms (b,c,d) specified by their indices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.DIHEDRAL_ANGLE'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_DISTANCE = Quantity(
        type=str,
        shape=[],
        description='''
        Print the distance between the atoms a and b specified by their indices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.DISTANCE'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.FILENAME'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_POSITION_SCALED = Quantity(
        type=str,
        shape=[],
        description='''
        Print the position vectors in scaled coordinates of the atoms specified by a list
        of their indices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.POSITION_SCALED'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_POSITION = Quantity(
        type=str,
        shape=[],
        description='''
        Print the position vectors in Cartesian coordinates of the atoms specified by a
        list of their indices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.POSITION'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_STRUCTURE_DATA_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.STRUCTURE_DATA.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRUCTURE_DATA.EACH'))


class x_cp2k_section_input_MOTION_PRINT_TRAJECTORY_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRAJECTORY.EACH'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_TRAJECTORY(MSection):
    '''
    Controls the output of the trajectory
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRAJECTORY'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_CHARGE_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the BETA field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.CHARGE_BETA'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_CHARGE_EXTENDED = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the very last field of the PDB file (starting from column
        81)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.CHARGE_EXTENDED'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_CHARGE_OCCUP = Quantity(
        type=str,
        shape=[],
        description='''
        Write the MM charges to the OCCUP field of the PDB file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.CHARGE_OCCUP'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.FILENAME'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the trajectory.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.FORMAT'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_TRAJECTORY_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRAJECTORY.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_TRAJECTORY_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_TRAJECTORY_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRAJECTORY.EACH'))


class x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR(MSection):
    '''
    Dumps the translation vector applied along an MD (if any). Useful for postprocessing
    of QMMM trajectories in which the QM fragment is continuously centered in the QM box
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRANSLATION_VECTOR'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.FILENAME'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_TRANSLATION_VECTOR_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.TRANSLATION_VECTOR.SECTION_PARAMETERS'))

    x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRANSLATION_VECTOR.EACH'))


class x_cp2k_section_input_MOTION_PRINT_VELOCITIES_EACH(MSection):
    '''
    This section specifies how often this proprety is printed.Each keyword inside this
    section is mapping to a specific iteration level and the value of each of these
    keywords is matched with the iteration level during the calculation. How to handle the
    last iteration is treated separately in ADD_LAST (this mean that each iteration level
    (MD, GEO_OPT, etc..), though equal to 0, might print the last iteration). If an
    iteration level is specified that is not present in the flow of the calculation it is
    just ignored.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.VELOCITIES.EACH'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_BAND = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Band Calculation Steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.BAND'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_BSSE = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Basis Set Superposition Error (BSSE) Calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.BSSE'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_CELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Cell optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.CELL_OPT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_EP_LIN_SOLVER = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Energy Perturbation (EP) linear solver
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.EP_LIN_SOLVER'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_GEO_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Geometry optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.GEO_OPT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_JUST_ENERGY = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for an ENERGY/ENERGY_FORCE calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.JUST_ENERGY'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_MD = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the MD steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.MD'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_METADYNAMICS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the METADYNAMICS steps (number of hills added).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.METADYNAMICS'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_POWELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for POWELL based optimization steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.POWELL_OPT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_QS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.QS_SCF'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_REPLICA_EVAL = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the evaluation of the Replica Environment
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.REPLICA_EVAL'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_ROT_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Rotational optimization steps in the Dimer Calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.ROT_OPT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_SHELL_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the Shell-Core distances optimization steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.SHELL_OPT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_SPLINE_FIND_COEFFS = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the solution of the coefficients of the splines
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.SPLINE_FIND_COEFFS'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_EACH_XAS_SCF = Quantity(
        type=str,
        shape=[],
        description='''
        Iteration level for the X-Ray Absorption Spectroscopy (XAS) SCF Steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.EACH.XAS_SCF'))


class x_cp2k_section_input_MOTION_PRINT_VELOCITIES(MSection):
    '''
    Controls the output of the velocities
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.VELOCITIES'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.ADD_LAST'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.FILENAME'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_FORMAT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the format of the output file for the velocities.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.FORMAT'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_PRINT_VELOCITIES_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.PRINT.VELOCITIES.UNIT'))

    x_cp2k_section_input_MOTION_PRINT_VELOCITIES_EACH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_VELOCITIES_EACH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.VELOCITIES.EACH'))


class x_cp2k_section_input_MOTION_PRINT(MSection):
    '''
    Controls the printing properties during an MD run
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT'))

    x_cp2k_section_input_MOTION_PRINT_CELL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CELL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CELL'))

    x_cp2k_section_input_MOTION_PRINT_CORE_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_FORCES'))

    x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_TRAJECTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_TRAJECTORY'))

    x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_CORE_VELOCITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.CORE_VELOCITIES'))

    x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_FORCE_MIXING_LABELS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCE_MIXING_LABELS'))

    x_cp2k_section_input_MOTION_PRINT_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.FORCES'))

    x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_MIXED_ENERGIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.MIXED_ENERGIES'))

    x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_RESTART_HISTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART_HISTORY'))

    x_cp2k_section_input_MOTION_PRINT_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.RESTART'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_FORCES'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_TRAJECTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_TRAJECTORY'))

    x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_SHELL_VELOCITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.SHELL_VELOCITIES'))

    x_cp2k_section_input_MOTION_PRINT_STRESS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_STRESS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRESS'))

    x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_STRUCTURE_DATA'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.STRUCTURE_DATA'))

    x_cp2k_section_input_MOTION_PRINT_TRAJECTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_TRAJECTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRAJECTORY'))

    x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_TRANSLATION_VECTOR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.TRANSLATION_VECTOR'))

    x_cp2k_section_input_MOTION_PRINT_VELOCITIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT_VELOCITIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT.VELOCITIES'))


class x_cp2k_section_input_MOTION_SHELL_OPT_BFGS_RESTART(MSection):
    '''
    Controls the printing of Hessian Restart file
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.BFGS.RESTART'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART.ADD_LAST'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART.FILENAME'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_MOTION_SHELL_OPT_BFGS(MSection):
    '''
    Provides parameters to tune the BFGS optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.BFGS'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the file used to read the initial Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART_FILE_NAME'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_RESTART_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Controls the reading of the initial Hessian from file.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.RESTART_HESSIAN'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_TRUST_RADIUS = Quantity(
        type=str,
        shape=[],
        description='''
        Trust radius used in BFGS. Previously set to 0.1. Large values can lead to
        instabilities
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.TRUST_RADIUS'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_USE_MODEL_HESSIAN = Quantity(
        type=str,
        shape=[],
        description='''
        Uses a model Hessian as initial guess instead of a unit matrix. Should lead in
        general to improved convergence might be switched off for exotic cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.USE_MODEL_HESSIAN'))

    x_cp2k_input_MOTION_SHELL_OPT_BFGS_USE_RAT_FUN_OPT = Quantity(
        type=str,
        shape=[],
        description='''
        Includes a rational function optimization to determine the step. Previously
        default but did not improve convergence in many cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.BFGS.USE_RAT_FUN_OPT'))

    x_cp2k_section_input_MOTION_SHELL_OPT_BFGS_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_BFGS_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.BFGS.RESTART'))


class x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_2PNT(MSection):
    '''
    Provides parameters to tune the line search for the two point based line search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_2PNT_LINMIN_GRAD_ONLY = Quantity(
        type=str,
        shape=[],
        description='''
        Use only the gradient, not the energy for line minimizations (e.g. in conjugate
        gradients).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.2PNT.LINMIN_GRAD_ONLY'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_2PNT_MAX_ALLOWED_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Max allowed value for the line search step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.2PNT.MAX_ALLOWED_STEP'))


class x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD(MSection):
    '''
    Provides parameters to tune the line search for the gold search.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD_BRACK_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Limit in 1D bracketing during line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD.BRACK_LIMIT'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD_BRENT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of iterations in brent algorithm (used for the line search in
        Conjugated Gradients Optimization)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD.BRENT_MAX_ITER'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD_BRENT_TOL = Quantity(
        type=str,
        shape=[],
        description='''
        Tolerance requested during Brent line search in Conjugate Gradients Optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD.BRENT_TOL'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD_INITIAL_STEP = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size used, e.g. for bracketing or minimizers. Might need to be
        reduced for systems with close contacts
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD.INITIAL_STEP'))


class x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH(MSection):
    '''
    Provides parameters to tune the line search during the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        1D line search algorithm to be used with the CG optimizer, in increasing order of
        robustness and cost.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.TYPE'))

    x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_2PNT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_2PNT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.2PNT'))

    x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH_GOLD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH.GOLD'))


class x_cp2k_section_input_MOTION_SHELL_OPT_CG(MSection):
    '''
    Provides parameters to tune the conjugate gradient optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_FLETCHER_REEVES = Quantity(
        type=str,
        shape=[],
        description='''
        Uses FLETCHER-REEVES instead of POLAK-RIBIERE when using Conjugate Gradients
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.FLETCHER_REEVES'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_MAX_STEEP_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of steepest descent steps before starting the conjugate gradients
        optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.MAX_STEEP_STEPS'))

    x_cp2k_input_MOTION_SHELL_OPT_CG_RESTART_LIMIT = Quantity(
        type=str,
        shape=[],
        description='''
        Cosine of the angle between two consecutive searching directions. If the angle
        during a CG optimization is less than the one corresponding to  to the
        RESTART_LIMIT the CG is reset and one step of steepest descent is  performed.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.CG.RESTART_LIMIT'))

    x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_CG_LINE_SEARCH'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG.LINE_SEARCH'))


class x_cp2k_section_input_MOTION_SHELL_OPT_LBFGS(MSection):
    '''
    Provides parameters to tune the limited memory BFGS (LBFGS) optimization
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.LBFGS'))

    x_cp2k_input_MOTION_SHELL_OPT_LBFGS_MAX_F_PER_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of force evaluations per iteration(used for the line search)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.LBFGS.MAX_F_PER_ITER'))

    x_cp2k_input_MOTION_SHELL_OPT_LBFGS_MAX_H_RANK = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum rank (and consequently size) of the approximate Hessian matrix used by the
        LBFGS optimizer. Larger values (e.g. 30) will accelerate the convergence behaviour
        at the cost of a larger memory consumption.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.LBFGS.MAX_H_RANK'))

    x_cp2k_input_MOTION_SHELL_OPT_LBFGS_WANTED_PROJ_GRADIENT = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested norm threshold of the
        gradient multiplied by the approximate Hessian.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.LBFGS.WANTED_PROJ_GRADIENT'))

    x_cp2k_input_MOTION_SHELL_OPT_LBFGS_WANTED_REL_F_ERROR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium (overrides the general ones):Requested relative error on the
        objective functionof the optimizer (the energy)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.LBFGS.WANTED_REL_F_ERROR'))


class x_cp2k_section_input_MOTION_SHELL_OPT(MSection):
    '''
    This section sets the environment for the optimization of the shell-core distances
    that might turn to be necessary along a MD run using a shell-model potential.  The
    optimization procedure is activated when at least one of the shell-core pairs becomes
    too elongated,  i.e. when the assumption of point dipole is not longer valid.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT'))

    x_cp2k_input_MOTION_SHELL_OPT_MAX_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum geometry change between the current and the
        last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.MAX_DR'))

    x_cp2k_input_MOTION_SHELL_OPT_MAX_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the maximum force component of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.MAX_FORCE'))

    x_cp2k_input_MOTION_SHELL_OPT_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum number of geometry optimization steps. One step might imply
        several force evaluations for the CG and LBFGS optimizers.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.MAX_ITER'))

    x_cp2k_input_MOTION_SHELL_OPT_OPTIMIZER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify which method to use to perform a geometry optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.OPTIMIZER'))

    x_cp2k_input_MOTION_SHELL_OPT_RMS_DR = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) geometry change between the
        current and the last optimizer iteration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.RMS_DR'))

    x_cp2k_input_MOTION_SHELL_OPT_RMS_FORCE = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the root mean square (RMS) force of the current
        configuration.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.RMS_FORCE'))

    x_cp2k_input_MOTION_SHELL_OPT_STEP_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        The starting step value for the SHELL_OPT module.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.SHELL_OPT.STEP_START_VAL'))

    x_cp2k_section_input_MOTION_SHELL_OPT_BFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_BFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.BFGS'))

    x_cp2k_section_input_MOTION_SHELL_OPT_CG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_CG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.CG'))

    x_cp2k_section_input_MOTION_SHELL_OPT_LBFGS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT_LBFGS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT.LBFGS'))


class x_cp2k_section_input_MOTION_TMC_MOVE_TYPE(MSection):
    '''
    This section specifies the TMC move type, and its properties. Selectable types are:
    ATOM_TRANS atom translation, MOL_TRANS molecule translation, MOL_ROT molecule
    rotation, PROT_REORDER proton reordering, PT_SWAP Parallel Tempering swap, VOL_MOVE
    volume change, ATOM_SWAP swaps two atoms of different type.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.MOVE_TYPE'))

    x_cp2k_input_MOTION_TMC_MOVE_TYPE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the move. Up to now only used for the atom
        swap.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_TYPE.ATOMS'))

    x_cp2k_input_MOTION_TMC_MOVE_TYPE_INIT_ACC_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the initial probability of accepting the move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_TYPE.INIT_ACC_PROB'))

    x_cp2k_input_MOTION_TMC_MOVE_TYPE_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the probability of the move (considering the ration between the selected
        moves)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_TYPE.PROB'))

    x_cp2k_input_MOTION_TMC_MOVE_TYPE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the move type described in this section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_TYPE.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_TMC_MOVE_TYPE_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the size of the move:ATOM_TRANS [A], MOL_TRANS [A], MOL_ROT [degree],
        PROT_REORDER [], VOL_MOVE [A], ATOM_SWAP
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_TYPE.SIZE'))


class x_cp2k_section_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE(MSection):
    '''
    This section specifies the TMC move type, and its properties. Selectable types are:
    ATOM_TRANS atom translation, MOL_TRANS molecule translation, MOL_ROT molecule
    rotation, PROT_REORDER proton reordering, PT_SWAP Parallel Tempering swap, VOL_MOVE
    volume change, ATOM_SWAP swaps two atoms of different type.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kinds involved in the move. Up to now only used for the atom
        swap.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE.ATOMS'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE_INIT_ACC_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the initial probability of accepting the move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE.INIT_ACC_PROB'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the probability of the move (considering the ration between the selected
        moves)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE.PROB'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the move type described in this section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE.SECTION_PARAMETERS'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the size of the move:ATOM_TRANS [A], MOL_TRANS [A], MOL_ROT [degree],
        PROT_REORDER [], VOL_MOVE [A], ATOM_SWAP
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE.SIZE'))


class x_cp2k_section_input_MOTION_TMC_NMC_MOVES(MSection):
    '''
    This section specifies the TMC move types, which are performed within the nested Monte
    Carlo (NMC). thus using the approximate potential.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.NMC_MOVES'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_INIT_ACC_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the initial probability of accepting the move.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.INIT_ACC_PROB'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_NMC_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        input file name for the approximate potential for Nested Monte Carlo.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.NMC_FILE_NAME'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_NR_NMC_STEPS = Quantity(
        type=str,
        shape=[],
        description='''
        the number of Nested Mont Carlo moves with in one MC move should be huge enough to
        reach euilibrium state
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.NR_NMC_STEPS'))

    x_cp2k_input_MOTION_TMC_NMC_MOVES_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the probability of the NMC move (considering the ration between the
        selected other moves)the probabilities of the move types in the NMC section
        defines only the weight within the NMC steps
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NMC_MOVES.PROB'))

    x_cp2k_section_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_NMC_MOVES_MOVE_TYPE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.NMC_MOVES.MOVE_TYPE'))


class x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_CHARGE(MSection):
    '''
    This section specifies the charge of the MM atoms
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS.CHARGE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_CHARGE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind of the charge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.CHARGE.ATOM'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the charge of the MM atom in electron charge unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.CHARGE.CHARGE'))


class x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES_CHARGE(MSection):
    '''
    This section specifies the charge of the MM atoms
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS_FILES.CHARGE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_CHARGE_ATOM = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the atomic kind of the charge.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.CHARGE.ATOM'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_CHARGE_CHARGE = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the charge of the MM atom in electron charge unit.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.CHARGE.CHARGE'))


class x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES(MSection):
    '''
    Analysing the Markov Chain elments with the specified methods, reading form default or
    specified files
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS_FILES'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_CELL_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        file name for analysing the cell file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.CELL_FILE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_CLASSICAL_DIPOLE_MOMENTS = Quantity(
        type=str,
        shape=[],
        description='''
        calculates the classical dipole Moment. Following flag specifies if they should be
        written. Class. Dip. Mom. are also used to unfold the exact dipole moment.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.CLASSICAL_DIPOLE_MOMENTS'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Mass density in the simulation cell, or if specified in sub cubes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.DENSITY'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_DEVIATION = Quantity(
        type=str,
        shape=[],
        description='''
        Calculates the deviation of the position from the last configuration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.DEVIATION'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_DIPOLE_ANALYSIS = Quantity(
        type=str,
        shape=[],
        description='''
        Enables analysis of dipole moments, espacially dielectric constant. An additional
        type can be specified, e.g. analyzing ice structures.using SYM_XYZ also dipoles
        (-x,y,z) .. .. (-x,-y,z).... (-x,-y-z) are regarded, only use it if this
        configurations have all the same energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.DIPOLE_ANALYSIS'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_DIPOLE_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        file name for analysing the dipole file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.DIPOLE_FILE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_DIRECTORIES = Quantity(
        type=str,
        shape=[],
        description='''
        Analysing multiple directories, created by standard parallel MC (e.g. using TMC
        farming
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.DIRECTORIES'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_END_ELEM = Quantity(
        type=str,
        shape=[],
        description='''
        end analysis at element with number #
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.END_ELEM'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_FORCE_ENV_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        input file name for force env, to get initial configuration with dimensions and
        cell
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.FORCE_ENV_FILE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_G_R = Quantity(
        type=str,
        shape=[],
        description='''
        Radial Distribution Function for each pair of atomsusing the amount of specified
        bins within MAX(cell_lenght)/2
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.G_R'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_NR_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        the number of different temperature for parallel tempering
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.NR_TEMPERATURE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_POSITION_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        file name for analysing the position file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.POSITION_FILE'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_PREFIX_ANA_FILES = Quantity(
        type=str,
        shape=[],
        description='''
        specifies a prefix for all analysis files.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.PREFIX_ANA_FILES'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Enables/disables the reading and writing of  analysis restart files
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.RESTART'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_START_ELEM = Quantity(
        type=str,
        shape=[],
        description='''
        start analysis at element with number #
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.START_ELEM'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_FILES_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        one temperatue OR for parallel tempering: Tmin Tmax or each temperature T1 T2 T3
        ... If every single temperature is specified, do NOT use keyword NR_TEMPERATURE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS_FILES.TEMPERATURE'))

    x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS_FILES.CHARGE'))


class x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS(MSection):
    '''
    Analysing the Markov Chain elments with the specified methods
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_CLASSICAL_DIPOLE_MOMENTS = Quantity(
        type=str,
        shape=[],
        description='''
        calculates the classical dipole Moment. Following flag specifies if they should be
        written. Class. Dip. Mom. are also used to unfold the exact dipole moment.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.CLASSICAL_DIPOLE_MOMENTS'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_DENSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Mass density in the simulation cell, or if specified in sub cubes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.DENSITY'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_DEVIATION = Quantity(
        type=str,
        shape=[],
        description='''
        Calculates the deviation of the position from the last configuration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.DEVIATION'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_DIPOLE_ANALYSIS = Quantity(
        type=str,
        shape=[],
        description='''
        Enables analysis of dipole moments, espacially dielectric constant. An additional
        type can be specified, e.g. analyzing ice structures.using SYM_XYZ also dipoles
        (-x,y,z) .. .. (-x,-y,z).... (-x,-y-z) are regarded, only use it if this
        configurations have all the same energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.DIPOLE_ANALYSIS'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_G_R = Quantity(
        type=str,
        shape=[],
        description='''
        Radial Distribution Function for each pair of atomsusing the amount of specified
        bins within MAX(cell_lenght)/2
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.G_R'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_PREFIX_ANA_FILES = Quantity(
        type=str,
        shape=[],
        description='''
        specifies a prefix for all analysis files.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.PREFIX_ANA_FILES'))

    x_cp2k_input_MOTION_TMC_TMC_ANALYSIS_RESTART = Quantity(
        type=str,
        shape=[],
        description='''
        Enables/disables the reading and writing of  analysis restart files
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TMC_ANALYSIS.RESTART'))

    x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_CHARGE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_CHARGE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS.CHARGE'))


class x_cp2k_section_input_MOTION_TMC(MSection):
    '''
    A parallelized MC algorithm, presampling the configurations, espacially the Markov
    chain elements
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC'))

    x_cp2k_input_MOTION_TMC_ALL_CONF_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        file name for printing every single calculated configuration (e.g. for fitting).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.ALL_CONF_FILE_NAME'))

    x_cp2k_input_MOTION_TMC_DOT_TREE = Quantity(
        type=str,
        shape=[],
        description='''
        file name for GrapgViz dot file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.DOT_TREE'))

    x_cp2k_input_MOTION_TMC_ENERGY_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        input file name for the exact potential energy calculation.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.ENERGY_FILE_NAME'))

    x_cp2k_input_MOTION_TMC_ESIMATE_ACC_PROB = Quantity(
        type=str,
        shape=[],
        description='''
        set the estimation of the acceptance probability using run time information of the
        energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.ESIMATE_ACC_PROB'))

    x_cp2k_input_MOTION_TMC_GROUP_ANLYSIS_NR = Quantity(
        type=str,
        shape=[],
        description='''
        amount of groups (cores) for analysing the configurations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.GROUP_ANLYSIS_NR'))

    x_cp2k_input_MOTION_TMC_GROUP_CC_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        amount of of CPUs per group for configurational change
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.GROUP_CC_SIZE'))

    x_cp2k_input_MOTION_TMC_GROUP_ENERGY_NR = Quantity(
        type=str,
        shape=[],
        description='''
        amount of groups for exact energy calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.GROUP_ENERGY_NR'))

    x_cp2k_input_MOTION_TMC_GROUP_ENERGY_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        amount of CPUs per group for energy calculation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.GROUP_ENERGY_SIZE'))

    x_cp2k_input_MOTION_TMC_INFO_OUT_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        the number the amount of calculated configurations between to output printings.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.INFO_OUT_STEP_SIZE'))

    x_cp2k_input_MOTION_TMC_MOVE_CENTER_OF_MASS = Quantity(
        type=str,
        shape=[],
        description='''
        Moves the center of mass of defined molecules (in volume moves)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.MOVE_CENTER_OF_MASS'))

    x_cp2k_input_MOTION_TMC_NR_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        the number of different temperature for parallel tempering
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NR_TEMPERATURE'))

    x_cp2k_input_MOTION_TMC_NUM_MC_ELEM = Quantity(
        type=str,
        shape=[],
        description='''
        the minimum Markov Chain elements, to be sampled
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NUM_MC_ELEM'))

    x_cp2k_input_MOTION_TMC_NUM_MV_ELEM_IN_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        the number of elements (atoms or molecules) moves in cell or sub box.if 0 all
        elements are moved once in a MC move
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.NUM_MV_ELEM_IN_CELL'))

    x_cp2k_input_MOTION_TMC_PRESSURE = Quantity(
        type=str,
        shape=[],
        description='''
        enables NPT calculation with specified constant pressure [bar]
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRESSURE'))

    x_cp2k_input_MOTION_TMC_PRINT_CELL = Quantity(
        type=str,
        shape=[],
        description='''
        printing the cell vectors of the Markov Chain elements
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_CELL'))

    x_cp2k_input_MOTION_TMC_PRINT_COORDS = Quantity(
        type=str,
        shape=[],
        description='''
        printing coordinates of the Markov Chain elements
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_COORDS'))

    x_cp2k_input_MOTION_TMC_PRINT_DIPOLE = Quantity(
        type=str,
        shape=[],
        description='''
        enables the calculation and printing the exact cell dipoles (only for QS methods)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_DIPOLE'))

    x_cp2k_input_MOTION_TMC_PRINT_ENERGIES = Quantity(
        type=str,
        shape=[],
        description='''
        printing the different calculated energies (approximated, scf and exact)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_ENERGIES'))

    x_cp2k_input_MOTION_TMC_PRINT_FORCES = Quantity(
        type=str,
        shape=[],
        description='''
        printing forces of the Markov Chain elements
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_FORCES'))

    x_cp2k_input_MOTION_TMC_PRINT_ONLY_ACC = Quantity(
        type=str,
        shape=[],
        description='''
        printing only accepted elements of the Markov Chain.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_ONLY_ACC'))

    x_cp2k_input_MOTION_TMC_PRINT_TEST_OUTPUT = Quantity(
        type=str,
        shape=[],
        description='''
        printing different values for regtest comparison
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.PRINT_TEST_OUTPUT'))

    x_cp2k_input_MOTION_TMC_RESTART_IN = Quantity(
        type=str,
        shape=[],
        description='''
        if existing use the last restart file
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.RESTART_IN'))

    x_cp2k_input_MOTION_TMC_RESTART_OUT = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the frequency to write restart files. If no frequency is specified (lone
        keyword) the restart file is written at the end (only). If the value is 0, no
        restart file is written at all. The frequency specifies is related to the
        calculated Markov chain elements
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.RESTART_OUT'))

    x_cp2k_input_MOTION_TMC_RESULT_LIST_IN_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        enables the storing of the whole Markov Chain
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.RESULT_LIST_IN_MEMORY'))

    x_cp2k_input_MOTION_TMC_RND_DETERMINISTIC = Quantity(
        type=str,
        shape=[],
        description='''
        the initialisation number for the random number generator
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.RND_DETERMINISTIC'))

    x_cp2k_input_MOTION_TMC_SPECULATIVE_CANCELING = Quantity(
        type=str,
        shape=[],
        description='''
        enables or disables the speculative canceling. If we have further knowledge of
        acceptance probabilities using parent acceptance or the estimated energy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.SPECULATIVE_CANCELING'))

    x_cp2k_input_MOTION_TMC_SUB_BOX = Quantity(
        type=str,
        shape=[],
        description='''
        specifies the size ot the sub box. Standard moves only within subbox of random
        position, to compensate the potential difference of the approximate potential.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.SUB_BOX'))

    x_cp2k_input_MOTION_TMC_TASK_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Select specialized types. Selectable:IDEAL_GAS (constant configuration energy
        E=0.0),
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TASK_TYPE'))

    x_cp2k_input_MOTION_TMC_TEMPERATURE = Quantity(
        type=str,
        shape=[],
        description='''
        one temperatue OR for parallel tempering: Tmin Tmax or each temperature T1 T2 T3
        ... If every single temperature is specified, do NOT use keyword NR_TEMPERATURE
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.TEMPERATURE'))

    x_cp2k_input_MOTION_TMC_USE_SCF_ENERGY_INFO = Quantity(
        type=str,
        shape=[],
        description='''
        enables or disables the usage of SCF energy information for  estimating the
        acceptance probability.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.USE_SCF_ENERGY_INFO'))

    x_cp2k_input_MOTION_TMC_VOLUME_ISOTROPIC = Quantity(
        type=str,
        shape=[],
        description='''
        volume move is equal in each direction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MOTION.TMC.VOLUME_ISOTROPIC'))

    x_cp2k_section_input_MOTION_TMC_MOVE_TYPE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_MOVE_TYPE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.MOVE_TYPE'))

    x_cp2k_section_input_MOTION_TMC_NMC_MOVES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_NMC_MOVES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.NMC_MOVES'))

    x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS_FILES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS_FILES'))

    x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC_TMC_ANALYSIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC.TMC_ANALYSIS'))


class x_cp2k_section_input_MOTION(MSection):
    '''
    This section defines a set of tool connected with the motion of the nuclei.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION'))

    x_cp2k_section_input_MOTION_BAND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_BAND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.BAND'))

    x_cp2k_section_input_MOTION_CELL_OPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CELL_OPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CELL_OPT'))

    x_cp2k_section_input_MOTION_CONSTRAINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_CONSTRAINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.CONSTRAINT'))

    x_cp2k_section_input_MOTION_DRIVER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_DRIVER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.DRIVER'))

    x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FLEXIBLE_PARTITIONING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FLEXIBLE_PARTITIONING'))

    x_cp2k_section_input_MOTION_FREE_ENERGY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_FREE_ENERGY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.FREE_ENERGY'))

    x_cp2k_section_input_MOTION_GEO_OPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_GEO_OPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.GEO_OPT'))

    x_cp2k_section_input_MOTION_MC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MC'))

    x_cp2k_section_input_MOTION_MD = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_MD'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.MD'))

    x_cp2k_section_input_MOTION_PINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PINT'))

    x_cp2k_section_input_MOTION_PRINT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_PRINT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.PRINT'))

    x_cp2k_section_input_MOTION_SHELL_OPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_SHELL_OPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.SHELL_OPT'))

    x_cp2k_section_input_MOTION_TMC = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION_TMC'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION.TMC'))


class x_cp2k_section_input_MULTIPLE_FORCE_EVALS(MSection):
    '''
    Describes how to handle multiple force_evals.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_MULTIPLE_FORCE_EVALS'))

    x_cp2k_input_MULTIPLE_FORCE_EVALS_FORCE_EVAL_ORDER = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the orders of the different force_eval. When using a MIXED force_eval this
        does not need to be specified in this list, because it that takes into account
        only the real energy contributions
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MULTIPLE_FORCE_EVALS.FORCE_EVAL_ORDER'))

    x_cp2k_input_MULTIPLE_FORCE_EVALS_MULTIPLE_SUBSYS = Quantity(
        type=str,
        shape=[],
        description='''
        Specify if force_eval have different subsys. In case they share the same subsys,
        it needs to be specified only in the MIXED force_eval (if using MIXED) or in the
        force_eval corresponding to first force_eval of the previous order (when not using
        MIXED).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_MULTIPLE_FORCE_EVALS.MULTIPLE_SUBSYS'))


class x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS(MSection):
    '''
    specicifies contraints for the exponents to be fitted. Only a single constraint can be
    applied to an exponent
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND.CONSTRAIN_EXPONENTS'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS_BOUNDARIES = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the boundaries to which the optimization is restricted. First value is the
        lower bound, second value is the upper bound.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.CONSTRAIN_EXPONENTS.BOUNDARIES'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS_MAX_VAR_FRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the maximum fractionr by which the exponent is allowed to vary. e.g. 0.5
        allows the exp to vary by 0.5*exp in both directions.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.CONSTRAIN_EXPONENTS.MAX_VAR_FRACTION'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS_USE_EXP = Quantity(
        type=str,
        shape=[],
        description='''
        Defines the exponent to be constraint. The two integers indicate the set number
        and i'th exponent. The value -1 can be used to mark all sets/expoenents in a set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.CONSTRAIN_EXPONENTS.USE_EXP'))


class x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS(MSection):
    '''
    This section can be used to create subsets of a basis  which will be fitted at the
    same time. This is especially useful if connected bsis sets e.g. TZVP, DZVP, SZV
    should be fitted.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND.DERIVED_BASIS_SETS'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS_REFERENCE_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the reference basis ID which is used as template to create the new set.
        The original basis has ID 0. All follwing sets are counted in order as specified
        in the Input. The decriptors always assume the structure of the input basis set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.DERIVED_BASIS_SETS.REFERENCE_SET'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS_REMOVE_CONTRACTION = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to remove a contraction from the reference basis set. The contraction
        is speciefied by set number, angular momentum and number of contraction. The
        decriptors always assume the structure of the input basis set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.DERIVED_BASIS_SETS.REMOVE_CONTRACTION'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS_REMOVE_SET = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to remove a set from the reference basis set.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.DERIVED_BASIS_SETS.REMOVE_SET'))


class x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND(MSection):
    '''
    specicifies the atomic kinds to be fitted and the basis sets associated with the kind.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_BASIS_SET = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the basis set for the kind. Has to be specified in
        BASIS_TEMPLATE_FILE.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.BASIS_SET'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_INITIAL_DEGREES_OF_FREEDOM = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the initial degrees of freedom in the basis optimization.This can be
        used to make further specifications easier
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.INITIAL_DEGREES_OF_FREEDOM'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        The name of the kind described in this section.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.SECTION_PARAMETERS'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_SWITCH_COEFF_STATE = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to switch the state of a given coefficient from current state
        (varibale/fixed)) to the opposite state. The three integers indicate the set
        number, the angular momentum i'th contraction and i'th coefficient
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.SWITCH_COEFF_STATE'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_SWITCH_CONTRACTION_STATE = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to switch the state of a given contraction from current state
        (varibale/fixed)) to the opposite state. The three integers indicate the set
        number, the angular momentum and i'th contraction
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.SWITCH_CONTRACTION_STATE'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_SWITCH_EXP_STATE = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to switch the state of a given exponent from current state
        (varibale/fixed)) to the opposite state. The two integers indicate the set number
        and i'th exponent
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.SWITCH_EXP_STATE'))

    x_cp2k_input_OPTIMIZE_BASIS_FIT_KIND_SWITCH_SET_STATE = Quantity(
        type=str,
        shape=[],
        description='''
        Allows to switch the states of in a set from current state (varibale/fixed)) to
        the opposite state. The two integers indicate the affected part
        (0=ALL,1=EXPS,2=COEFF) and i'th set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.FIT_KIND.SWITCH_SET_STATE'))

    x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_CONSTRAIN_EXPONENTS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND.CONSTRAIN_EXPONENTS'))

    x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND_DERIVED_BASIS_SETS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND.DERIVED_BASIS_SETS'))


class x_cp2k_section_input_OPTIMIZE_BASIS_OPTIMIZATION(MSection):
    '''
    sets the parameters for optimizition, output frequency and restarts
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.OPTIMIZATION'))

    x_cp2k_input_OPTIMIZE_BASIS_OPTIMIZATION_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Final accuracy requested in optimization (RHOEND)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.OPTIMIZATION.ACCURACY'))

    x_cp2k_input_OPTIMIZE_BASIS_OPTIMIZATION_MAX_FUN = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of function evaluations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.OPTIMIZATION.MAX_FUN'))

    x_cp2k_input_OPTIMIZE_BASIS_OPTIMIZATION_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size for search algorithm (RHOBEG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.OPTIMIZATION.STEP_SIZE'))


class x_cp2k_section_input_OPTIMIZE_BASIS_TRAINING_FILES(MSection):
    '''
    specicifies the location in which the files necessary for fitting procedure are
    located. Each Training set needs a reptition of this section.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.TRAINING_FILES'))

    x_cp2k_input_OPTIMIZE_BASIS_TRAINING_FILES_DIRECTORY = Quantity(
        type=str,
        shape=[],
        description='''
        the directory in which the files are placed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.TRAINING_FILES.DIRECTORY'))

    x_cp2k_input_OPTIMIZE_BASIS_TRAINING_FILES_INPUT_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the input file used to run the original calcuation
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.TRAINING_FILES.INPUT_FILE_NAME'))


class x_cp2k_section_input_OPTIMIZE_BASIS(MSection):
    '''
    describes a basis optimization job, in which an ADMM like approach is used to find the
    best exponents and/or coefficients to match a given training set.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS'))

    x_cp2k_input_OPTIMIZE_BASIS_BASIS_COMBINATIONS = Quantity(
        type=str,
        shape=[],
        description='''
        If multiple atomic kinds are fitted at the same time, this keyword allows to
        specify which basis sets should be used together in optimization (underived set
        ID=0). If skipped all combinations are used. The order is taken as the kinds and
        sets are specified in the input
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.BASIS_COMBINATIONS'))

    x_cp2k_input_OPTIMIZE_BASIS_BASIS_OUTPUT_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file containing the optimized basis
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.BASIS_OUTPUT_FILE'))

    x_cp2k_input_OPTIMIZE_BASIS_BASIS_TEMPLATE_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file, containing the structure of the new basis set
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.BASIS_TEMPLATE_FILE'))

    x_cp2k_input_OPTIMIZE_BASIS_BASIS_WORK_FILE = Quantity(
        type=str,
        shape=[],
        description='''
        Name of the basis set file which is created to be read as initial guess
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.BASIS_WORK_FILE'))

    x_cp2k_input_OPTIMIZE_BASIS_CONDITION_WEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword allows to give different weight factors to the condition number of
        different basis combinations (LOG(cond) is used). The first entry corresponds to
        the original basis sets. Every further value is assigned to the combinations in
        the order given for BASIS_COMBINATIONS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.CONDITION_WEIGHT'))

    x_cp2k_input_OPTIMIZE_BASIS_GROUP_PARTITION = Quantity(
        type=str,
        shape=[],
        description='''
        Allows the specification of the group mpi group sizes in parallel runs. If less
        Groups than tasks are speciefied, consecutive calculations  Will be assigned to
        one group (derived basis sets and then training sets) If keyword is skipped, equal
        group sizes will be generated trying to fit all calculations.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.GROUP_PARTITION'))

    x_cp2k_input_OPTIMIZE_BASIS_RESIDUUM_WEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        This keyword allows to give different weight factors to the residuum of the
        different basis combinations. The first entry corresponds to the original basis
        sets. Every further value is assigned to the combinations in the order given for
        BASIS_COMBINATIONS.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.RESIDUUM_WEIGHT'))

    x_cp2k_input_OPTIMIZE_BASIS_USE_CONDITION_NUMBER = Quantity(
        type=str,
        shape=[],
        description='''
        Determines whether condition number should be part of optimization or not
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.USE_CONDITION_NUMBER'))

    x_cp2k_input_OPTIMIZE_BASIS_WRITE_FREQUENCY = Quantity(
        type=str,
        shape=[],
        description='''
        Frequency at which the intermediate results should be written
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_BASIS.WRITE_FREQUENCY'))

    x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS_FIT_KIND'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.FIT_KIND'))

    x_cp2k_section_input_OPTIMIZE_BASIS_OPTIMIZATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS_OPTIMIZATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.OPTIMIZATION'))

    x_cp2k_section_input_OPTIMIZE_BASIS_TRAINING_FILES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS_TRAINING_FILES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS.TRAINING_FILES'))


class x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES(MSection):
    '''
    A comparison of energies between fit and reference
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES.ADD_LAST'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES.FILENAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES.LOG_PRINT_KEY'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES.SECTION_PARAMETERS'))


class x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES(MSection):
    '''
    A comparison of forces between fit and reference
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES.ADD_LAST'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES.FILENAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES.LOG_PRINT_KEY'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES.SECTION_PARAMETERS'))


class x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING(MSection):
    '''
    Specify the force matching input.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_ENERGY_WEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        Relative weight of the energy RMSD vs the force RMSD
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.ENERGY_WEIGHT'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_FRAME_COUNT = Quantity(
        type=str,
        shape=[],
        description='''
        Use at most FRAME_COUNT frames from the reference trajectory, adjusting the stride
        to have them as fas apart as possible (all=-1).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.FRAME_COUNT'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_FRAME_START = Quantity(
        type=str,
        shape=[],
        description='''
        starting frame to be used from the reference trajectory
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.FRAME_START'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_FRAME_STOP = Quantity(
        type=str,
        shape=[],
        description='''
        final frame to be used from the reference trajectory (all=-1)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.FRAME_STOP'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_FRAME_STRIDE = Quantity(
        type=str,
        shape=[],
        description='''
        stride when using the reference trajectory
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.FRAME_STRIDE'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_GROUP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Gives the preferred size of a working group, groups will always be equal or larger
        than this size.Usually this should take the number of cores per socket into
        account for good performance.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.GROUP_SIZE'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_OPTIMIZE_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the input file which contains the parameters to be optimized
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.OPTIMIZE_FILE_NAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_REF_CELL_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the reference cell
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.REF_CELL_FILE_NAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_REF_FORCE_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the reference forces, should also contain the energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.REF_FORCE_FILE_NAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_REF_TRAJ_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        the filename of the reference coordinates.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.REF_TRAJ_FILE_NAME'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_SHIFT_AVERAGE = Quantity(
        type=str,
        shape=[],
        description='''
        Shift averages of the energies before computing energy RMSD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.SHIFT_AVERAGE'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_SHIFT_MM = Quantity(
        type=str,
        shape=[],
        description='''
        Shift of the fit energies applied before computing energy RMSD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.SHIFT_MM'))

    x_cp2k_input_OPTIMIZE_INPUT_FORCE_MATCHING_SHIFT_QM = Quantity(
        type=str,
        shape=[],
        description='''
        Shift of the reference energies applied before computing energy RMSD.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.FORCE_MATCHING.SHIFT_QM'))

    x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_ENERGIES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_ENERGIES'))

    x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING_COMPARE_FORCES'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING.COMPARE_FORCES'))


class x_cp2k_section_input_OPTIMIZE_INPUT_HISTORY(MSection):
    '''
    writes a history of the function value and parameters
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.HISTORY'))

    x_cp2k_input_OPTIMIZE_INPUT_HISTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.HISTORY.ADD_LAST'))

    x_cp2k_input_OPTIMIZE_INPUT_HISTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.HISTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_OPTIMIZE_INPUT_HISTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.HISTORY.FILENAME'))

    x_cp2k_input_OPTIMIZE_INPUT_HISTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.HISTORY.LOG_PRINT_KEY'))

    x_cp2k_input_OPTIMIZE_INPUT_HISTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.HISTORY.SECTION_PARAMETERS'))


class x_cp2k_section_input_OPTIMIZE_INPUT_RESTART(MSection):
    '''
    writes an input file that can be used to restart
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.RESTART'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.ADD_LAST'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_BACKUP_COPIES = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the maximum index of backup copies.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.BACKUP_COPIES'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.FILENAME'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.LOG_PRINT_KEY'))

    x_cp2k_input_OPTIMIZE_INPUT_RESTART_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RESTART.SECTION_PARAMETERS'))


class x_cp2k_section_input_OPTIMIZE_INPUT_VARIABLE(MSection):
    '''
    Defines initial values for variables and their labels
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.VARIABLE'))

    x_cp2k_input_OPTIMIZE_INPUT_VARIABLE_FIXED = Quantity(
        type=str,
        shape=[],
        description='''
        Is this variable fixed or should it be optimized.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.VARIABLE.FIXED'))

    x_cp2k_input_OPTIMIZE_INPUT_VARIABLE_LABEL = Quantity(
        type=str,
        shape=[],
        description='''
        The label used in the input file, i.e. ${LABEL} will be replaced by the VALUE
        specified.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.VARIABLE.LABEL'))

    x_cp2k_input_OPTIMIZE_INPUT_VARIABLE_VALUE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial value of the variable
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.VARIABLE.VALUE'))


class x_cp2k_section_input_OPTIMIZE_INPUT(MSection):
    '''
    describes an input optimization job, in which parameters in input files get optimized.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT'))

    x_cp2k_input_OPTIMIZE_INPUT_ACCURACY = Quantity(
        type=str,
        shape=[],
        description='''
        Final accuracy requested in optimization (RHOEND)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.ACCURACY'))

    x_cp2k_input_OPTIMIZE_INPUT_ITER_START_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        Used for restarting, starting value of the iteration
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.ITER_START_VAL'))

    x_cp2k_input_OPTIMIZE_INPUT_MAX_FUN = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of function evaluations
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.MAX_FUN'))

    x_cp2k_input_OPTIMIZE_INPUT_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        What kind of input optimization to perform.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.METHOD'))

    x_cp2k_input_OPTIMIZE_INPUT_RANDOMIZE_VARIABLES = Quantity(
        type=str,
        shape=[],
        description='''
        Percentage randomization of the free variables applied initially
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.RANDOMIZE_VARIABLES'))

    x_cp2k_input_OPTIMIZE_INPUT_STEP_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Initial step size for search algorithm (RHOBEG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_OPTIMIZE_INPUT.STEP_SIZE'))

    x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_FORCE_MATCHING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.FORCE_MATCHING'))

    x_cp2k_section_input_OPTIMIZE_INPUT_HISTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_HISTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.HISTORY'))

    x_cp2k_section_input_OPTIMIZE_INPUT_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.RESTART'))

    x_cp2k_section_input_OPTIMIZE_INPUT_VARIABLE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT_VARIABLE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT.VARIABLE'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT_HISTORY(MSection):
    '''
    Section controling the history of visited minima and how minima are recognized at a
    later point.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.HISTORY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_HISTORY_ENERGY_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        If the difference of two energies is below this threshold they are considert
        equal.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.HISTORY.ENERGY_PRECISION'))

    x_cp2k_input_SWARM_GLOBAL_OPT_HISTORY_FINGERPRINT_PRECISION = Quantity(
        type=str,
        shape=[],
        description='''
        If the euclidean distance of two fingerprints is below this threshold, they are
        considert equal.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.HISTORY.FINGERPRINT_PRECISION'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY(MSection):
    '''
    Printkey to controll the writting of the minima trajectory. This trajectory contains
    all encountered local minima.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.ADD_LAST'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.FILENAME'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.LOG_PRINT_KEY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.SECTION_PARAMETERS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY.UNIT'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING(MSection):
    '''
    Section controls Minima Crawling run.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_ESCAPE_HISTORY_LENGTH = Quantity(
        type=str,
        shape=[],
        description='''
        Number of escapes averaged for scoring of minima.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.ESCAPE_HISTORY_LENGTH'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPDIST_INIT_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Initial width of temperature distribution.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPDIST_INIT_WIDTH'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPDIST_UPDATE_HEIGHT = Quantity(
        type=str,
        shape=[],
        description='''
        Height of gaussian used to update temperature distribution.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPDIST_UPDATE_HEIGHT'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPDIST_UPDATE_WIDTH = Quantity(
        type=str,
        shape=[],
        description='''
        Width of gaussian used to update temperature distribution.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPDIST_UPDATE_WIDTH'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPERATURE_INIT = Quantity(
        type=str,
        shape=[],
        description='''
        Initial temperature in Kelvin
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPERATURE_INIT'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPSTEP_BASE = Quantity(
        type=str,
        shape=[],
        description='''
        Base used to calculate temperature steps base**n
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPSTEP_BASE'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_TEMPSTEP_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of temperature steps.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.TEMPSTEP_MAX'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_WORKER_PER_MINIMA = Quantity(
        type=str,
        shape=[],
        description='''
        Maximum number of active workers per Minima.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.WORKER_PER_MINIMA'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING_MINIMA_TRAJECTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING.MINIMA_TRAJECTORY'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING(MSection):
    '''
    Section controlling the Minima Hopping method.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_ALPHA_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to decrease acceptance energy, when minima was accepted, should be
        smaller than 1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.ALPHA_1'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_ALPHA_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to increase acceptance energy, when minima was rejected, should be
        larger than 1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.ALPHA_2'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_BETA_1 = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to increase temperature when escape failed, should be larger than 1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.BETA_1'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_BETA_2 = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to increase temperature when escape found known minima, should be
        larger than 1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.BETA_2'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_BETA_3 = Quantity(
        type=str,
        shape=[],
        description='''
        Factor used to decrease temperature when escape succeeded, should be smaller than
        1.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.BETA_3'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_E_ACCEPT_INIT = Quantity(
        type=str,
        shape=[],
        description='''
        Initial value of acceptance energy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.E_ACCEPT_INIT'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_SHARE_HISTORY = Quantity(
        type=str,
        shape=[],
        description='''
        If set all worker will use a single share history of visited minima.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.SHARE_HISTORY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING_TEMPERATURE_INIT = Quantity(
        type=str,
        shape=[],
        description='''
        Initially temperature in Kelvin
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING.TEMPERATURE_INIT'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY(MSection):
    '''
    Printkey to controll the writting of the progress trajectory. This trajectory contains
    the minima, which are lower in energy than the by then lowerest.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.ADD_LAST'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.FILENAME'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.LOG_PRINT_KEY'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.SECTION_PARAMETERS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY_UNIT = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the unit of measurement for the quantity in output. All available CP2K
        units can be used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY.UNIT'))


class x_cp2k_section_input_SWARM_GLOBAL_OPT(MSection):
    '''
    Section to control global geometry optimizations.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT'))

    x_cp2k_input_SWARM_GLOBAL_OPT_BUMP_STEPS_DOWNWARDS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of MD steps with potential energy decreases required for a bump.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.BUMP_STEPS_DOWNWARDS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_BUMP_STEPS_UPWARDS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of MD steps with potential energy increases required for a bump.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.BUMP_STEPS_UPWARDS'))

    x_cp2k_input_SWARM_GLOBAL_OPT_E_TARGET = Quantity(
        type=str,
        shape=[],
        description='''
        Target Energy, the optimization will quit once a lower potential energy is
        reached.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.E_TARGET'))

    x_cp2k_input_SWARM_GLOBAL_OPT_FRAGMENTATION_THRESHOLD = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for atom distance used for detecting fragmentation of clusters.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.FRAGMENTATION_THRESHOLD'))

    x_cp2k_input_SWARM_GLOBAL_OPT_MD_BUMPS_MAX = Quantity(
        type=str,
        shape=[],
        description='''
        Number of bumps in potential energy after which MD runs ends.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.MD_BUMPS_MAX'))

    x_cp2k_input_SWARM_GLOBAL_OPT_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Methods to use for optimization.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.GLOBAL_OPT.METHOD'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT_HISTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT_HISTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.HISTORY'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_CRAWLING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_CRAWLING'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT_MINIMA_HOPPING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.MINIMA_HOPPING'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT_PROGRESS_TRAJECTORY'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT.PROGRESS_TRAJECTORY'))


class x_cp2k_section_input_SWARM(MSection):
    '''
    Section to control swarm runs. The swarm framework provides a common ground for
    master/worker algorithms.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM'))

    x_cp2k_input_SWARM_BEHAVIOR = Quantity(
        type=str,
        shape=[],
        description='''
        Which behaviour should control the swarm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.BEHAVIOR'))

    x_cp2k_input_SWARM_MAX_ITER = Quantity(
        type=str,
        shape=[],
        description='''
        The maximum number iterations the master should perform
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.MAX_ITER'))

    x_cp2k_input_SWARM_NUMBER_OF_WORKERS = Quantity(
        type=str,
        shape=[],
        description='''
        Number of workers used for swarm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.NUMBER_OF_WORKERS'))

    x_cp2k_input_SWARM_REPLAY_COMMUNICATION_LOG = Quantity(
        type=str,
        shape=[],
        description='''
        Filename of communication log of previous run. Use this to restart a swarm.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_SWARM.REPLAY_COMMUNICATION_LOG'))

    x_cp2k_section_input_SWARM_GLOBAL_OPT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM_GLOBAL_OPT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM.GLOBAL_OPT'))


class x_cp2k_section_input_TEST_CP_DBCSR(MSection):
    '''
    Benchmark and test the cp_dbcsr routines
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.CP_DBCSR'))

    x_cp2k_input_TEST_CP_DBCSR_ALPHA = Quantity(
        type=str,
        shape=[],
        description='''
        Multiplication factor
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.ALPHA'))

    x_cp2k_input_TEST_CP_DBCSR_ALWAYS_CHECKSUM = Quantity(
        type=str,
        shape=[],
        description='''
        perform a checksum after each multiplication
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.ALWAYS_CHECKSUM'))

    x_cp2k_input_TEST_CP_DBCSR_ASPARSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Sparsity of A matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.ASPARSITY'))

    x_cp2k_input_TEST_CP_DBCSR_ATYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix A type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.ATYPE'))

    x_cp2k_input_TEST_CP_DBCSR_BETA = Quantity(
        type=str,
        shape=[],
        description='''
        Product premultiplication factor
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BETA'))

    x_cp2k_input_TEST_CP_DBCSR_BS_K = Quantity(
        type=str,
        shape=[],
        description='''
        Block sizes of inner dimension
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BS_K'))

    x_cp2k_input_TEST_CP_DBCSR_BS_M = Quantity(
        type=str,
        shape=[],
        description='''
        Row block sizes of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BS_M'))

    x_cp2k_input_TEST_CP_DBCSR_BS_N = Quantity(
        type=str,
        shape=[],
        description='''
        Column block sizes of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BS_N'))

    x_cp2k_input_TEST_CP_DBCSR_BSPARSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Sparsity of B matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BSPARSITY'))

    x_cp2k_input_TEST_CP_DBCSR_BTYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix B type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.BTYPE'))

    x_cp2k_input_TEST_CP_DBCSR_CSPARSITY = Quantity(
        type=str,
        shape=[],
        description='''
        Sparsity of C matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.CSPARSITY'))

    x_cp2k_input_TEST_CP_DBCSR_CTYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Matrix C type
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.CTYPE'))

    x_cp2k_input_TEST_CP_DBCSR_DATA_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Data type of the matrices
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.DATA_TYPE'))

    x_cp2k_input_TEST_CP_DBCSR_FILTER_EPS = Quantity(
        type=str,
        shape=[],
        description='''
        Threshold for on-the-fly and final filtering.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.FILTER_EPS'))

    x_cp2k_input_TEST_CP_DBCSR_KEEPSPARSE = Quantity(
        type=str,
        shape=[],
        description='''
        Keep product sparse
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.KEEPSPARSE'))

    x_cp2k_input_TEST_CP_DBCSR_K = Quantity(
        type=str,
        shape=[],
        description='''
        Inner dimension M
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.K'))

    x_cp2k_input_TEST_CP_DBCSR_M = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension 1 of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.M'))

    x_cp2k_input_TEST_CP_DBCSR_N_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of operations being timed (useful for small matrices).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.N_LOOP'))

    x_cp2k_input_TEST_CP_DBCSR_NPROC = Quantity(
        type=str,
        shape=[],
        description='''
        Number of processors to test
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.NPROC'))

    x_cp2k_input_TEST_CP_DBCSR_N = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension 2 of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.N'))

    x_cp2k_input_TEST_CP_DBCSR_TEST_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Which part of DBCSR is tested
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.TEST_TYPE'))

    x_cp2k_input_TEST_CP_DBCSR_TRANSA = Quantity(
        type=str,
        shape=[],
        description='''
        Transpose matrix A
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.TRANSA'))

    x_cp2k_input_TEST_CP_DBCSR_TRANSB = Quantity(
        type=str,
        shape=[],
        description='''
        Transpose matrix B
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_DBCSR.TRANSB'))


class x_cp2k_section_input_TEST_CP_FM_GEMM(MSection):
    '''
    Benchmark and test the cp_fm_gemm routines by multiplying C=A*B
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.CP_FM_GEMM'))

    x_cp2k_input_TEST_CP_FM_GEMM_FORCE_BLOCKSIZE = Quantity(
        type=str,
        shape=[],
        description='''
        Forces the blocksize, even if this implies that a few processes might have no data
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.FORCE_BLOCKSIZE'))

    x_cp2k_input_TEST_CP_FM_GEMM_GRID_2D = Quantity(
        type=str,
        shape=[],
        description='''
        Explicitly set the blacs 2D processor layout. If the product differs from the
        number of MPI ranks, it is ignored and a default nearly square layout is used.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.GRID_2D'))

    x_cp2k_input_TEST_CP_FM_GEMM_K = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension 1 of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.K'))

    x_cp2k_input_TEST_CP_FM_GEMM_M = Quantity(
        type=str,
        shape=[],
        description='''
        Inner dimension M
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.M'))

    x_cp2k_input_TEST_CP_FM_GEMM_N_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of cp_fm_gemm operations being timed (useful for small matrices).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.N_LOOP'))

    x_cp2k_input_TEST_CP_FM_GEMM_NCOL_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        block_size for cols
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.NCOL_BLOCK'))

    x_cp2k_input_TEST_CP_FM_GEMM_NROW_BLOCK = Quantity(
        type=str,
        shape=[],
        description='''
        block_size for rows
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.NROW_BLOCK'))

    x_cp2k_input_TEST_CP_FM_GEMM_N = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension 2 of C
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.N'))

    x_cp2k_input_TEST_CP_FM_GEMM_ROW_MAJOR = Quantity(
        type=str,
        shape=[],
        description='''
        Use a row major blacs grid
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.ROW_MAJOR'))

    x_cp2k_input_TEST_CP_FM_GEMM_TRANSA = Quantity(
        type=str,
        shape=[],
        description='''
        Transpose matrix A
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.TRANSA'))

    x_cp2k_input_TEST_CP_FM_GEMM_TRANSB = Quantity(
        type=str,
        shape=[],
        description='''
        Transpose matrix B
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CP_FM_GEMM.TRANSB'))


class x_cp2k_section_input_TEST_EIGENSOLVER(MSection):
    '''
    Benchmark and test the eigensolver routines.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.EIGENSOLVER'))

    x_cp2k_input_TEST_EIGENSOLVER_DIAG_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Diagonalization strategy
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.EIGENSOLVER.DIAG_METHOD'))

    x_cp2k_input_TEST_EIGENSOLVER_EIGENVALUES = Quantity(
        type=str,
        shape=[],
        description='''
        number of eigenvalues to be computed (all=<0)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.EIGENSOLVER.EIGENVALUES'))

    x_cp2k_input_TEST_EIGENSOLVER_INIT_METHOD = Quantity(
        type=str,
        shape=[],
        description='''
        Initialization approach
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.EIGENSOLVER.INIT_METHOD'))

    x_cp2k_input_TEST_EIGENSOLVER_N_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of operations being timed (useful for small matrices).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.EIGENSOLVER.N_LOOP'))

    x_cp2k_input_TEST_EIGENSOLVER_N = Quantity(
        type=str,
        shape=[],
        description='''
        Dimension of the square matrix
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.EIGENSOLVER.N'))


class x_cp2k_section_input_TEST_GRID_INFORMATION(MSection):
    '''
    Controls the printing of information regarding the PW and RS grid structures (ONLY for
    TEST run).
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.GRID_INFORMATION'))

    x_cp2k_input_TEST_GRID_INFORMATION_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.GRID_INFORMATION.ADD_LAST'))

    x_cp2k_input_TEST_GRID_INFORMATION_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.GRID_INFORMATION.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_TEST_GRID_INFORMATION_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.GRID_INFORMATION.FILENAME'))

    x_cp2k_input_TEST_GRID_INFORMATION_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.GRID_INFORMATION.LOG_PRINT_KEY'))

    x_cp2k_input_TEST_GRID_INFORMATION_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.GRID_INFORMATION.SECTION_PARAMETERS'))


class x_cp2k_section_input_TEST_PROGRAM_RUN_INFO(MSection):
    '''
    controls the printing of tests output
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.PROGRAM_RUN_INFO'))

    x_cp2k_input_TEST_PROGRAM_RUN_INFO_ADD_LAST = Quantity(
        type=str,
        shape=[],
        description='''
        If the last iteration should be added, and if it should be marked symbolically
        (with lowercase letter l) or with the iteration number. Not every iteration level
        is able to identify the last iteration early enough to be able to output. When
        this keyword is activated all iteration levels are checked for the last iteration
        step.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PROGRAM_RUN_INFO.ADD_LAST'))

    x_cp2k_input_TEST_PROGRAM_RUN_INFO_COMMON_ITERATION_LEVELS = Quantity(
        type=str,
        shape=[],
        description='''
        How many iterations levels should be written in the same file (no extra
        information about the actual iteration level is written to the file)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PROGRAM_RUN_INFO.COMMON_ITERATION_LEVELS'))

    x_cp2k_input_TEST_PROGRAM_RUN_INFO_FILENAME = Quantity(
        type=str,
        shape=[],
        description='''
        controls part of the filename for output.  use __STD_OUT__ (exactly as written
        here) for the screen or standard logger.  use filename to obtain projectname-
        filename.  use ./filename to get filename. A middle name (if present), iteration
        numbers and extension are always added to the filename. if you want to avoid it
        use =filename, in this case the filename is always exactly as typed. Please note
        that this can lead to clashes of filenames.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PROGRAM_RUN_INFO.FILENAME'))

    x_cp2k_input_TEST_PROGRAM_RUN_INFO_LOG_PRINT_KEY = Quantity(
        type=str,
        shape=[],
        description='''
        This keywords enables the logger for the print_key (a message is printed on screen
        everytime data, controlled by this print_key, are written)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PROGRAM_RUN_INFO.LOG_PRINT_KEY'))

    x_cp2k_input_TEST_PROGRAM_RUN_INFO_SECTION_PARAMETERS = Quantity(
        type=str,
        shape=[],
        description='''
        Level starting at which this proprety is printed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PROGRAM_RUN_INFO.SECTION_PARAMETERS'))


class x_cp2k_section_input_TEST_PW_TRANSFER(MSection):
    '''
    Benchmark and test the pw_transfer routines.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.PW_TRANSFER'))

    x_cp2k_input_TEST_PW_TRANSFER_DEBUG = Quantity(
        type=str,
        shape=[],
        description='''
        Do the FFT in debug mode in all cases
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.DEBUG'))

    x_cp2k_input_TEST_PW_TRANSFER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of grid points (not all grid points are allowed)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.GRID'))

    x_cp2k_input_TEST_PW_TRANSFER_N_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of pw_transfers (backward&forward) being timed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.N_LOOP'))

    x_cp2k_input_TEST_PW_TRANSFER_PW_GRID_BLOCKED = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, leave the default...Can be used to set the distribution in
        g-space for the pw grids and their FFT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.PW_GRID_BLOCKED'))

    x_cp2k_input_TEST_PW_TRANSFER_PW_GRID_LAYOUT_ALL = Quantity(
        type=str,
        shape=[],
        description='''
        loop overal all PW_GRID_LAYOUTs that are compatible with a given number of CPUs
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.PW_GRID_LAYOUT_ALL'))

    x_cp2k_input_TEST_PW_TRANSFER_PW_GRID_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, leave the default...Can be used to set the distribution for ray-
        distributed FFT.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.PW_GRID_LAYOUT'))

    x_cp2k_input_TEST_PW_TRANSFER_PW_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        What kind of PW_GRID should be employed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.PW_TRANSFER.PW_GRID'))


class x_cp2k_section_input_TEST_RS_PW_TRANSFER_RS_GRID(MSection):
    '''
    Set options that influence how the realspace grids are being distributed in parallel
    runs.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.RS_PW_TRANSFER.RS_GRID'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_DISTRIBUTION_LAYOUT = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the number of slices in the x, y and z directions.-1 specifies that any
        number of slices is OK.If a given distribution can not be satisfied, a replicated
        grid will result.Also see LOCK_DISTRIBUTION.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.DISTRIBUTION_LAYOUT'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_DISTRIBUTION_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Parallelization strategy.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.DISTRIBUTION_TYPE'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_HALO_REDUCTION_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        Can be used to reduce the halo of the distributed grid (experimental features).
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.HALO_REDUCTION_FACTOR'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_LOCK_DISTRIBUTION = Quantity(
        type=str,
        shape=[],
        description='''
        Expert use only, only basic QS deals correctly with a non-default value.If the
        distribution is locked, a grid will have the same distribution asthe next finer
        multigrid (provided it is distributed).If unlocked, all grids can be distributed
        freely.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.LOCK_DISTRIBUTION'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_MAX_DISTRIBUTED_LEVEL = Quantity(
        type=str,
        shape=[],
        description='''
        If the multigrid-level of a grid is larger than the parameter, it will not be
        distributed in the automatic scheme.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.MAX_DISTRIBUTED_LEVEL'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS_GRID_MEMORY_FACTOR = Quantity(
        type=str,
        shape=[],
        description='''
        A grid will only be distributed if the memory usage for that grid (including halo)
        is smaller than a replicated grid by this parameter.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS_GRID.MEMORY_FACTOR'))


class x_cp2k_section_input_TEST_RS_PW_TRANSFER(MSection):
    '''
    Describes how to benchmark the rs_pw_transfer routines.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.RS_PW_TRANSFER'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_GRID = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of grid points (not all grid points are allowed)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.GRID'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_HALO_SIZE = Quantity(
        type=str,
        shape=[],
        description='''
        number of grid points of the halo
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.HALO_SIZE'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_N_LOOP = Quantity(
        type=str,
        shape=[],
        description='''
        Number of rs_pw_transfers being timed
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.N_LOOP'))

    x_cp2k_input_TEST_RS_PW_TRANSFER_RS2PW = Quantity(
        type=str,
        shape=[],
        description='''
        should the direction be rs2pw (pw2rs otherwise)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RS_PW_TRANSFER.RS2PW'))

    x_cp2k_section_input_TEST_RS_PW_TRANSFER_RS_GRID = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_RS_PW_TRANSFER_RS_GRID'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.RS_PW_TRANSFER.RS_GRID'))


class x_cp2k_section_input_TEST(MSection):
    '''
    Tests to perform on the supported libraries.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST'))

    x_cp2k_input_TEST_CLEBSCH_GORDON = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the Clebsch-Gordon Coefficients. Tests are repeated the given number of
        times.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.CLEBSCH_GORDON'))

    x_cp2k_input_TEST_COPY = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the performance to copy two vectors.The results of these tests allow to
        determine the size of the cache of the CPU. This can be used to optimize the
        performance of theFFTSG library. Tests are repeated the given number of times.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.COPY'))

    x_cp2k_input_TEST_DGEMM = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the performance of different kinds of matrix matrix multiply kernels for the
        BLAS INTRINSIC DGEMM. Matrices up to 2**N+1 will be tested.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.DGEMM'))

    x_cp2k_input_TEST_ERI = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the performance and correctness of ERI libraries
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.ERI'))

    x_cp2k_input_TEST_FFT = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the performance of all available FFT libraries for 3D FFTs Tests are
        repeated the given number of times.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.FFT'))

    x_cp2k_input_TEST_MATMUL = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the performance of different kinds of matrix matrix multiply kernels for the
        F95 INTRINSIC matmul. Matrices up to 2**N+1 will be tested.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.MATMUL'))

    x_cp2k_input_TEST_MEMORY = Quantity(
        type=str,
        shape=[],
        description='''
        Set the maximum amount of memory allocated for a given test (in bytes)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.MEMORY'))

    x_cp2k_input_TEST_MPI = Quantity(
        type=str,
        shape=[],
        description='''
        Tests mpi, quickly adapted benchmark code,will ONLY work on an even number of
        CPUs. comm is the relevant, initialized communicator. This test will produce
        messages of the size 8*10**requested_size, where requested_size is the value given
        to this keyword
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.MPI'))

    x_cp2k_input_TEST_RANDOM_NUMBER_GENERATOR = Quantity(
        type=str,
        shape=[],
        description='''
        Tests the parallel random number generator (RNG)
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_TEST.RANDOM_NUMBER_GENERATOR'))

    x_cp2k_section_input_TEST_CP_DBCSR = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_CP_DBCSR'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.CP_DBCSR'))

    x_cp2k_section_input_TEST_CP_FM_GEMM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_CP_FM_GEMM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.CP_FM_GEMM'))

    x_cp2k_section_input_TEST_EIGENSOLVER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_EIGENSOLVER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.EIGENSOLVER'))

    x_cp2k_section_input_TEST_GRID_INFORMATION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_GRID_INFORMATION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.GRID_INFORMATION'))

    x_cp2k_section_input_TEST_PROGRAM_RUN_INFO = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_PROGRAM_RUN_INFO'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.PROGRAM_RUN_INFO'))

    x_cp2k_section_input_TEST_PW_TRANSFER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_PW_TRANSFER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.PW_TRANSFER'))

    x_cp2k_section_input_TEST_RS_PW_TRANSFER = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST_RS_PW_TRANSFER'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST.RS_PW_TRANSFER'))


class x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INVOLVED_ATOMS(MSection):
    '''
    All parameters needed for the tracking of modes dominated by the motion of selected
    atoms
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.INVOLVED_ATOMS'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INVOLVED_ATOMS_INVOLVED_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms on which the tracked eigenvector should have the
        highest value similar to looking for the vibration of a set of atoms
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.INVOLVED_ATOMS.INVOLVED_ATOMS'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INVOLVED_ATOMS_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the range of wavenumbers in which the modes related to the ATOMS have to
        be tracked.  If not specified frequencies >400cm-1 will be used to avoid tracking
        of translational or rotational modes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.INVOLVED_ATOMS.RANGE'))


class x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE(MSection):
    '''
    All parameters needed for to run a mode selective vibrational analysis
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_ATOMS = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the list of atoms which should be displaced for the Initial guess
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.ATOMS'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_EPS_MAX_VAL = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the davidson algorithm. Specifies the maximal value in
        the residuum vectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.EPS_MAX_VAL'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_EPS_NORM = Quantity(
        type=str,
        shape=[],
        description='''
        Convergence criterium for the davidson algorithm. Specifies the maximal value of
        the norm of the residuum vectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.EPS_NORM'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_FREQUENCY = Quantity(
        type=str,
        shape=[],
        description='''
        value close to the expected value of the frequency for to look for. If the block
        Davidson algorithm is applied, the nrep closest frequencies are tracked.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.FREQUENCY'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INITIAL_GUESS = Quantity(
        type=str,
        shape=[],
        description='''
        The type of initial guess for the normal modes
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.INITIAL_GUESS'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_RANGE = Quantity(
        type=str,
        shape=[],
        description='''
        Track modes in a given range of frequencies. No warranty that the set of
        frequencies is complete.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.RANGE'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_RESTART_FILE_NAME = Quantity(
        type=str,
        shape=[],
        description='''
        Specifies the name of the file used to create the restarted vectors
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.RESTART_FILE_NAME'))

    x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INVOLVED_ATOMS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE_INVOLVED_ATOMS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE.INVOLVED_ATOMS'))


class x_cp2k_section_input_VIBRATIONAL_ANALYSIS(MSection):
    '''
    Section to setup parameters to perform a Normal Modes analysis.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_DX = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the increment to be used to construct the HESSIAN with finite difference
        method
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.DX'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_FULLY_PERIODIC = Quantity(
        type=str,
        shape=[],
        description='''
        Avoids to clean rotations from the Hessian matrix.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.FULLY_PERIODIC'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_INTENSITIES = Quantity(
        type=str,
        shape=[],
        description='''
        Calculation of the IR-Intensities. Calculation of dipols has to be specified
        explicitly
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.INTENSITIES'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_NPROC_REP = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the number of processors to be used per replica environment (for parallel
        runs). In case of mode selective calculations more than one replica will start a
        block Davidson algorithm to track more than only one frequency
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.NPROC_REP'))

    x_cp2k_input_VIBRATIONAL_ANALYSIS_PROC_DIST_TYPE = Quantity(
        type=str,
        shape=[],
        description='''
        Specify the topology of the mapping of processors into replicas.
        ''',
        a_legacy=LegacyDefinition(name='x_cp2k_input_VIBRATIONAL_ANALYSIS.PROC_DIST_TYPE'))

    x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_VIBRATIONAL_ANALYSIS_MODE_SELECTIVE'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS.MODE_SELECTIVE'))


class x_cp2k_section_input(MSection):
    '''
    This section contains the explicitly stated keywords, default keywords, and section
    parameters in the CP2K input file. Only some of the sections that control printing
    (PRINT, EACH) are supported, because including all of them would double the size of
    this metadata without adding much useful information. The hidden input keywords
    starting with a double underscore are not included.
    '''

    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_cp2k_section_input'))

    x_cp2k_section_input_ATOM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_ATOM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_ATOM'))

    x_cp2k_section_input_DEBUG = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_DEBUG'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_DEBUG'))

    x_cp2k_section_input_EXT_RESTART = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_EXT_RESTART'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_EXT_RESTART'))

    x_cp2k_section_input_FARMING = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FARMING'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FARMING'))

    x_cp2k_section_input_FORCE_EVAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_FORCE_EVAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_FORCE_EVAL'))

    x_cp2k_section_input_GLOBAL = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_GLOBAL'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_GLOBAL'))

    x_cp2k_section_input_MOTION = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MOTION'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MOTION'))

    x_cp2k_section_input_MULTIPLE_FORCE_EVALS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_MULTIPLE_FORCE_EVALS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_MULTIPLE_FORCE_EVALS'))

    x_cp2k_section_input_OPTIMIZE_BASIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_BASIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_BASIS'))

    x_cp2k_section_input_OPTIMIZE_INPUT = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_OPTIMIZE_INPUT'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_OPTIMIZE_INPUT'))

    x_cp2k_section_input_SWARM = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_SWARM'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_SWARM'))

    x_cp2k_section_input_TEST = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_TEST'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_TEST'))

    x_cp2k_section_input_VIBRATIONAL_ANALYSIS = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input_VIBRATIONAL_ANALYSIS'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input_VIBRATIONAL_ANALYSIS'))


class section_run(public.section_run):

    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run'))

    x_cp2k_section_input = SubSection(
        sub_section=SectionProxy('x_cp2k_section_input'),
        repeats=True,
        a_legacy=LegacyDefinition(name='x_cp2k_section_input'))


m_package.__init_metainfo__()
