Source code for amptorch.descriptor.descriptor_calculator

import numpy as np

from .base_descriptor import BaseDescriptor


[docs]class DescriptorCalculator: def __init__( self, images, descriptor, calc_derivatives=True, save_fps=True, verbose=True, cores=1, ): assert isinstance( descriptor, BaseDescriptor ), "Descriptor must be instance of BaseDescriptor!" self.images = images self.descriptor = descriptor self.calc_derivatives = calc_derivatives self.save_fps = save_fps self.cores = cores self.verbose = verbose self.element_list = self.descriptor._get_element_list() self.descriptors_ready = False
[docs] def prepare_descriptors(self): self.calculated_descriptor_list = self.descriptor.prepare_fingerprints( self.images, calc_derivatives=self.calc_derivatives, save_fps=self.save_fps, cores=self.cores, verbose=self.verbose, log=None, ) self.descriptors_ready = True return self.calculated_descriptor_list
[docs] def get_descriptors(self, separate_atomtypes=True): if not self.descriptors_ready: print( "ERROR, descriptors not calculated yet, please call prepare_descriptors() function first" ) return None if separate_atomtypes: result = {} for element in self.element_list: element_descriptor_list = [] for calculated_decsriptor in self.calculated_decsriptor_list: if element in calculated_decsriptor.keys(): temp = calculated_decsriptor[element]["descriptors"].copy() element_descriptor_list.append(temp) result[element] = element_descriptor_list return result else: print( "WARNING: atomtype separation turned off, please make sure the dimensions match and you know what you are doing" ) result = [] for calculated_decsriptor in self.calculated_decsriptor_list: descriptors = np.array([]) for element in self.element_list: if element in calculated_decsriptor.keys(): temp = calculated_decsriptor[element]["descriptors"].copy() descriptors = ( np.vstack([descriptors, temp]) if descriptors.size else temp ) descriptors.append(temp) result.append(descriptors) return result
# TODO
[docs] def calculate_PCA( self, separate_atomtypes=True, save_models=True, n_components=10, apply_PCA=True ): raise NotImplementedError
# TODO
[docs] def calculate_scaling( self, separate_atomtypes=True, save_models=True, scaler_min=-1, scaler_max=1, apply_scaling=True, ): raise NotImplementedError