aiida.restapi.translator.nodes.data.array package#

Submodules#

Translator for bands data

class aiida.restapi.translator.nodes.data.array.bands.BandsDataTranslator(**kwargs)[source]#

Bases: DataTranslator

Translator relative to resource ‘bands’ and aiida class BandsData

class BandsData(arrays: ndarray | dict[str, ndarray] | None = None, **kwargs)#

Bases: KpointsData

Class to handle bands data

__abstractmethods__ = frozenset({})#
__annotations__ = {'_CLS_COLLECTION': 'Type[CollectionType]', '__plugin_type_string': 'ClassVar[str]', '__qb_fields__': 'Sequence[QbField]', '__query_type_string': 'ClassVar[str]', '_cached_arrays': 'dict[str, ndarray]', '_export_format_replacements': typing.Dict[str, str], '_hash_ignored_attributes': 'Tuple[str, ...]', '_logger': 'Optional[Logger]', '_updatable_attributes': 'Tuple[str, ...]', 'fields': 'QbFields'}#
__module__ = 'aiida.orm.nodes.data.array.bands'#
__parameters__ = ()#
__plugin_type_string: ClassVar[str]#
__qb_fields__: Sequence[QbField] = [QbArrayField('array_labels', dtype=Optional[List[str]], is_attribute=True), QbStrField('units', dtype=str, is_attribute=True)]#
__query_type_string: ClassVar[str]#
_abc_impl = <_abc._abc_data object>#
_cached_arrays: dict[str, ndarray]#
_get_band_segments(cartesian)#

Return the band segments.

_get_bandplot_data(cartesian, prettify_format=None, join_symbol=None, get_segments=False, y_origin=0.0)#

Get data to plot a band structure

Parameters:
  • cartesian – if True, distances (for the x-axis) are computed in cartesian coordinates, otherwise they are computed in reciprocal coordinates. cartesian=True will fail if no cell has been set.

  • prettify_format – by default, strings are not prettified. If you want to prettify them, pass a valid prettify_format string (see valid options in the docstring of :py:func:prettify_labels).

  • join_symbols – by default, strings are not joined. If you pass a string, this is used to join strings that are much closer than a given threshold. The most typical string is the pipe symbol: |.

  • get_segments – if True, also computes the band split into segments

  • y_origin – if present, shift bands so to set the value specified at y=0

Returns:

a plot_info dictiorary, whose keys are x (array of distances for the x axis of the plot); y (array of bands), labels (list of tuples in the format (float x value of the label, label string), band_type_idx (array containing an index for each band: if there is only one spin, then it’s an array of zeros, of length equal to the number of bands at each point; if there are two spins, then it’s an array of zeros or ones depending on the type of spin; the length is always equalt to the total number of bands per kpoint).

static _get_mpl_body_template(paths)#
Parameters:

paths – paths of k-points

_logger: Logger | None = <Logger aiida.orm.nodes.data.array.bands.BandsData (WARNING)>#
_matplotlib_get_dict(main_file_name='', comments=True, title='', legend=None, legend2=None, y_max_lim=None, y_min_lim=None, y_origin=0.0, prettify_format=None, **kwargs)#

Prepare the data to send to the python-matplotlib plotting script.

Parameters:
  • comments – if True, print comments (if it makes sense for the given format)

  • plot_info – a dictionary

  • setnumber_offset – an offset to be applied to all set numbers (i.e. s0 is replaced by s[offset], s1 by s[offset+1], etc.)

  • color_number – the color number for lines, symbols, error bars and filling (should be less than the parameter MAX_NUM_AGR_COLORS defined below)

  • title – the title

  • legend – the legend (applied only to the first of the set)

  • legend2 – the legend for second-type spins (applied only to the first of the set)

  • y_max_lim – the maximum on the y axis (if None, put the maximum of the bands)

  • y_min_lim – the minimum on the y axis (if None, put the minimum of the bands)

  • y_origin – the new origin of the y axis -> all bands are replaced by bands-y_origin

  • prettify_format – if None, use the default prettify format. Otherwise specify a string with the prettifier to use.

  • kwargs – additional customization variables; only a subset is accepted, see internal variable ‘valid_additional_keywords

_prepare_agr(main_file_name='', comments=True, setnumber_offset=0, color_number=1, color_number2=2, legend='', title='', y_max_lim=None, y_min_lim=None, y_origin=0.0, prettify_format=None)#

Prepare an xmgrace agr file.

Parameters:
  • comments – if True, print comments (if it makes sense for the given format)

  • plot_info – a dictionary

  • setnumber_offset – an offset to be applied to all set numbers (i.e. s0 is replaced by s[offset], s1 by s[offset+1], etc.)

  • color_number – the color number for lines, symbols, error bars and filling (should be less than the parameter MAX_NUM_AGR_COLORS defined below)

  • color_number2 – the color number for lines, symbols, error bars and filling for the second-type spins (should be less than the parameter MAX_NUM_AGR_COLORS defined below)

  • legend – the legend (applied only to the first set)

  • title – the title

  • y_max_lim – the maximum on the y axis (if None, put the maximum of the bands); applied after shifting the origin by y_origin

  • y_min_lim – the minimum on the y axis (if None, put the minimum of the bands); applied after shifting the origin by y_origin

  • y_origin – the new origin of the y axis -> all bands are replaced by bands-y_origin

  • prettify_format – if None, use the default prettify format. Otherwise specify a string with the prettifier to use.

_prepare_agr_batch(main_file_name='', comments=True, prettify_format=None)#

Prepare two files, data and batch, to be plot with xmgrace as: xmgrace -batch file.dat

Parameters:
  • main_file_name – if the user asks to write the main content on a file, this contains the filename. This should be used to infer a good filename for the additional files. In this case, we remove the extension, and add ‘_data.dat’

  • comments – if True, print comments (if it makes sense for the given format)

  • prettify_format – if None, use the default prettify format. Otherwise specify a string with the prettifier to use.

_prepare_dat_blocks(main_file_name='', comments=True)#

Format suitable for gnuplot using blocks. Columns with x and y (path and band energy). Several blocks, separated by two empty lines, one per energy band.

Parameters:

comments – if True, print comments (if it makes sense for the given format)

_prepare_dat_multicolumn(main_file_name='', comments=True)#

Write an N x M matrix. First column is the distance between kpoints, The other columns are the bands. Header contains number of kpoints and the number of bands (commented).

Parameters:

comments – if True, print comments (if it makes sense for the given format)

_prepare_gnuplot(main_file_name=None, title='', comments=True, prettify_format=None, y_max_lim=None, y_min_lim=None, y_origin=0.0)#

Prepare an gnuplot script to plot the bands, with the .dat file returned as an independent file.

Parameters:
  • main_file_name – if the user asks to write the main content on a file, this contains the filename. This should be used to infer a good filename for the additional files. In this case, we remove the extension, and add ‘_data.dat’

  • title – if specified, add a title to the plot

  • comments – if True, print comments (if it makes sense for the given format)

  • prettify_format – if None, use the default prettify format. Otherwise specify a string with the prettifier to use.

_prepare_json(main_file_name='', comments=True)#

Prepare a json file in a format compatible with the AiiDA band visualizer

Parameters:

comments – if True, print comments (if it makes sense for the given format)

_prepare_mpl_pdf(main_file_name='', *args, **kwargs)#

Prepare a python script using matplotlib to plot the bands, with the JSON returned as an independent file.

For the possible parameters, see documentation of _matplotlib_get_dict()

_prepare_mpl_png(main_file_name='', *args, **kwargs)#

Prepare a python script using matplotlib to plot the bands, with the JSON returned as an independent file.

For the possible parameters, see documentation of _matplotlib_get_dict()

_prepare_mpl_singlefile(*args, **kwargs)#

Prepare a python script using matplotlib to plot the bands

For the possible parameters, see documentation of _matplotlib_get_dict()

_prepare_mpl_withjson(main_file_name='', *args, **kwargs)#

Prepare a python script using matplotlib to plot the bands, with the JSON returned as an independent file.

For the possible parameters, see documentation of _matplotlib_get_dict()

_set_pbc(value)#

Validate the pbc, then store them

_validate_bands_occupations(bands, occupations=None, labels=None)#

Validate the list of bands and of occupations before storage. Kpoints must be set in advance. Bands and occupations must be convertible into arrays of Nkpoints x Nbands floats or Nspins x Nkpoints x Nbands; Nkpoints must correspond to the number of kpoints.

property array_labels#

Get the labels associated with the band arrays

fields: QbFields = {'array_labels': 'QbArrayField(attributes.array_labels) -> Optional[List[str]]',  'attributes': 'QbDictField(attributes.*) -> Dict[str, Any]',  'cell': 'QbArrayField(attributes.cell) -> List[List[float]]',  'ctime': 'QbNumericField(ctime) -> datetime',  'description': 'QbStrField(description) -> str',  'extras': 'QbDictField(extras.*) -> Dict[str, Any]',  'label': 'QbStrField(label) -> str',  'label_numbers': 'QbArrayField(attributes.label_numbers) -> List[int]',  'labels': 'QbArrayField(attributes.labels) -> List[str]',  'mesh': 'QbArrayField(attributes.mesh) -> List[int]',  'mtime': 'QbNumericField(mtime) -> datetime',  'node_type': 'QbStrField(node_type) -> str',  'offset': 'QbArrayField(attributes.offset) -> List[float]',  'pbc1': 'QbField(attributes.pbc1) -> bool',  'pbc2': 'QbField(attributes.pbc2) -> bool',  'pbc3': 'QbField(attributes.pbc3) -> bool',  'pk': 'QbNumericField(pk) -> int',  'repository_metadata': 'QbDictField(repository_metadata) -> Dict[str, Any]',  'source': 'QbDictField(attributes.source.*) -> Optional[dict]',  'units': 'QbStrField(attributes.units) -> str',  'user_pk': 'QbNumericField(user_pk) -> int',  'uuid': 'QbStrField(uuid) -> str'}#
get_bands(also_occupations=False, also_labels=False)#

Returns an array (nkpoints x num_bands or nspins x nkpoints x num_bands) of energies. :param also_occupations: if True, returns also the occupations array. Default = False

set_bands(bands, units=None, occupations=None, labels=None)#

Set an array of band energies of dimension (nkpoints x nbands). Kpoints must be set in advance. Can contain floats or None. :param bands: a list of nkpoints lists of nbands bands, or a 2D array of shape (nkpoints x nbands), with band energies for each kpoint :param units: optional, energy units :param occupations: optional, a 2D list or array of floats of same shape as bands, with the occupation associated to each band

set_kpointsdata(kpointsdata)#

Load the kpoints from a kpoint object. :param kpointsdata: an instance of KpointsData class

show_mpl(**kwargs)#

Call a show() command for the band structure using matplotlib. This uses internally the ‘mpl_singlefile’ format, with empty main_file_name.

Other kwargs are passed to self._exportcontent.

property units: str#

Units in which the data in bands were stored.

__annotations__ = {}#
__label__ = 'bands'#
__module__ = 'aiida.restapi.translator.nodes.data.array.bands'#
_aiida_class#

alias of BandsData

_aiida_type = 'data.core.array.bands.BandsData'#
_result_type = 'bands'#
static get_derived_properties(node)[source]#

Returns: data in a format required by dr.js to visualize a 2D plot with multiple data series.

Strategy: I take advantage of the export functionality of BandsData objects. The raw export has to be filtered for string escape characters. this is done by decoding the string returned by node._exportcontent.

TODO: modify the function exportstring (or add another function in BandsData) so that it returns a python object rather than a string.