bond_order_processing.calculations_for_atoms_lists

Calculations in this module are made for PairOfAtoms objects lists. This module is added in version: 1.1.0.

Example:
>>> from bond_order_processing.input_data import LoadedData
>>> from bond_order_processing.calculations_for_atoms_lists import CoordinationNumbers
>>> from bond_order_processing.input_data import InputDataFromCPMD
>>> from bond_order_processing.calculations import PairOfAtoms
>>> 
>>> path_to_input_file = r'./egzamples_instructions/cpmd_out1.txt'
>>> 
>>> input_data = InputDataFromCPMD()
>>> input_data.load_input_data(path_to_input_file, LoadedData.MayerBondOrders)
>>> mayer_bond_orders = input_data.return_data(LoadedData.MayerBondOrders)
>>> 
>>> pairs_of_atoms = [PairOfAtoms("P", "O", 0.2, 2.0, "P-O"), PairOfAtoms("Fe", "O", 0.2, 2.0, "Fe-O")]
>>> # Calculate percentage of coordination numbers of P
>>> coordinations_numbers_stats = CoordinationNumbersFromPairOfAtoms.calculate(pairs_of_atoms, mayer_bond_orders).calculate_statistics()
>>> coordinations_numbers_stats.coordination_numbers['P-O'].statistics
{4: 100.0}
  1"""Calculations in this module are made for PairOfAtoms
  2objects lists. This module is added in version: 1.1.0.
  3
  4
  5Example:
  6
  7    >>> from bond_order_processing.input_data import LoadedData
  8    >>> from bond_order_processing.calculations_for_atoms_lists import CoordinationNumbers
  9    >>> from bond_order_processing.input_data import InputDataFromCPMD
 10    >>> from bond_order_processing.calculations import PairOfAtoms
 11    >>> 
 12    >>> path_to_input_file = r'./egzamples_instructions/cpmd_out1.txt'
 13    >>> 
 14    >>> input_data = InputDataFromCPMD()
 15    >>> input_data.load_input_data(path_to_input_file, LoadedData.MayerBondOrders)
 16    >>> mayer_bond_orders = input_data.return_data(LoadedData.MayerBondOrders)
 17    >>> 
 18    >>> pairs_of_atoms = [PairOfAtoms("P", "O", 0.2, 2.0, "P-O"), PairOfAtoms("Fe", "O", 0.2, 2.0, "Fe-O")]
 19    >>> # Calculate percentage of coordination numbers of P
 20    >>> coordinations_numbers_stats = CoordinationNumbersFromPairOfAtoms.calculate(pairs_of_atoms, mayer_bond_orders).calculate_statistics()
 21    >>> coordinations_numbers_stats.coordination_numbers['P-O'].statistics
 22    {4: 100.0}
 23    
 24"""
 25__docformat__ = "google"
 26from .calculations import Calculations
 27from .calculations import Statistics
 28from .calculations import PairOfAtoms
 29from .calculations import Histogram
 30from .input_data import MayerBondOrders
 31from .input_data import CoordinatesOfAtoms
 32from .calculations import CoordinationNumbers
 33from .calculations import Connections
 34from .calculations import BondLength
 35from .calculations import Covalence
 36from .calculations import QiUnits
 37
 38
 39class _FromPairOfAtoms:
 40    @ staticmethod
 41    def _get_unique_atom_symbols(pair_of_atoms: list[PairOfAtoms])\
 42            -> list[str]:
 43        unique_symbols = []
 44        for item in pair_of_atoms:
 45            if item.atom_1 not in unique_symbols:
 46                unique_symbols.append(item.atom_1)
 47            if item.atom_2 not in unique_symbols:
 48                unique_symbols.append(item.atom_2)
 49
 50        return unique_symbols
 51
 52
 53class HistogramsFromPairOfAtoms(Calculations):
 54    """Calculate histograms for list of pairs of atoms."""
 55    _Histogram: type = Histogram
 56    histograms: dict[str, Histogram]
 57    """**key** - bond_id, **value** - Histogram object"""
 58    _atoms_names: dict[str, (str, str)]
 59
 60    @classmethod
 61    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
 62                  mayer_bond_orders: MayerBondOrders,
 63                  bins: int):
 64        """Calculate HistogramsFromPairOfAtoms object.
 65
 66        Args:
 67            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
 68            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
 69            bins (int): Number of bins in histogram.
 70
 71        Returns:
 72            **HistogramsFromPairOfAtoms**: HistogramsFromPairOfAtoms object
 73
 74        """
 75        self = cls()
 76        self.histograms = {}
 77        self._atoms_names = {}
 78        for item in pair_of_atoms:
 79            mbos = mayer_bond_orders\
 80                .get_mayer_bond_orders_list_between_two_atoms(
 81                    item.atom_1, item.atom_2)
 82
 83            if type(item.MBO_max) is str:
 84                if item.MBO_max == 'INF':
 85                    mbos = [mbo for mbo in mbos if item.MBO_min < mbo]
 86                else:
 87                    raise ValueError("Wrong type of max_mayer_bond_order!!!!")
 88            else:
 89                mbos = [mbo for mbo in mbos if item.MBO_max > mbo
 90                        and item.MBO_min < mbo]
 91
 92            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
 93            histogram = cls._Histogram.calculate(mbos, bins)
 94            self.histograms.update({item.id: histogram})
 95        return self
 96
 97    def remove_duplicates(self):
 98        """Removes duplicates, which have the same atoms symbols.
 99            Use when you perform calculations for list[PairOfAtoms]
100            when ids are different for the same atoms pairs.
101        """
102
103        temp = []
104        for key in list(self._atoms_names.keys()):
105            if self._atoms_names[key] in temp:
106                del self._atoms_names[key]
107                del self.histograms[key]
108            else:
109                temp.append(self._atoms_names[key])
110
111        return self
112
113    def to_string(self) -> str:
114        """Make string from HistogramsFromPairOfAtoms object
115
116        Returns:
117            **str**: String
118
119        """
120        string = ""
121        for key, histogram in self.histograms.items():
122            atom_id_1, atom_id_2 = self._atoms_names[key]
123            string += histogram.to_string(key, atom_id_1, atom_id_2)
124
125        return string
126
127
128class CoordinationNumbersFromPairOfAtoms(Calculations, Statistics):
129    """Calculate coordination numbers for list of pairs of atoms."""
130    _CoordinationNumbers: type = CoordinationNumbers
131    coordination_numbers: list[str, CoordinationNumbers]
132    """**key** - bond_id, **value** - CoordinationNumbers object"""
133    _atoms_names: dict[str, (str, str)]
134
135    @classmethod
136    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
137                  mayer_bond_orders: MayerBondOrders):
138        """Calculate CoordinationNumbersFromPairOfAtoms object.
139
140        Args:
141            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
142            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
143
144        Returns:
145            **CoordinationNumbersFromPairOfAtoms**: CoordinationNumbersFromPairOfAtoms object.
146
147        """
148        self = cls()
149        self.coordination_numbers = {}
150        self._atoms_names = {}
151        for item in pair_of_atoms:
152            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
153            coordination = cls._CoordinationNumbers\
154                .calculate(mayer_bond_orders,
155                           item.atom_1, item.atom_2,
156                           item.MBO_max, item.MBO_min,
157                           item.id)
158            self.coordination_numbers.update({item.id: coordination})
159        return self
160
161    def calculate_statistics(self):
162        """Calculate statistic in **CoordinationNumbers** objects."""
163
164        for keys in self.coordination_numbers.keys():
165            self.coordination_numbers[keys].calculate_statistics()
166        return self
167
168    def to_string(self) -> str:
169        """Make string from CoordinationNumbersFromPairOfAtoms object
170
171        Returns:
172            **str**: String
173
174        """
175        string = ""
176        for coordination_numbers in self.coordination_numbers.values():
177            string += coordination_numbers\
178                .to_string()
179
180        return string
181
182
183class ConnectionsFromPairOfAtoms(Calculations):
184    """Calculate connections for list of pairs of atoms."""
185    _Connections: type = Connections
186    connections: dict[str, Histogram]
187    """**key** - bond_id, **value** - Connections object"""
188    _atoms_names: dict[str, (str, str)]
189
190    @classmethod
191    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
192                  mayer_bond_orders: MayerBondOrders):
193        """Calculate ConnectionsFromPairOfAtoms object.
194
195        Args:
196            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
197            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
198
199        Returns:
200            **ConnectionsFromPairOfAtoms**: ConnectionsFromPairOfAtoms object.
201
202        """
203        self = cls()
204        self.connections = {}
205        self._atoms_names = {}
206        for item in pair_of_atoms:
207            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
208            connections = cls._Connections\
209                .calculate(mayer_bond_orders,
210                           item.atom_1, pair_of_atoms)
211            self.connections.update({item.id: connections})
212        return self
213
214    def to_string(self) -> str:
215        """Make string from ConnectionsFromPairOfAtoms object
216
217        Returns:
218            **str**: String
219
220        """
221        string = ""
222        for connections in self.connections.values():
223            string += connections\
224                .to_string()
225
226        return string
227
228
229class BondLengthFromPairOfAtoms(Calculations):
230    """Calculate bonds lengths for list of pairs of atoms."""
231    _BondLength: type = BondLength
232    bond_lengths: dict[str, BondLength]
233    """**key** - bond_id, **value** - BondLength object"""
234    _atoms_names: dict[str, (str, str)]
235
236    @classmethod
237    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
238                  mayer_bond_orders: MayerBondOrders,
239                  coordinates_of_atoms: CoordinatesOfAtoms) -> type:
240        """Calculate BondLengthFromPairOfAtoms object.
241
242        Args:
243            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
244            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
245            coordinates_of_atoms (CoordinatesOfAtoms): CoordinatesOfAtoms.
246
247        Returns:
248            **BondLengthFromPairOfAtoms**: BondLengthFromPairOfAtoms object.
249
250        """
251        self = cls()
252        self.bond_lengths = {}
253        self._atoms_names = {}
254        for item in pair_of_atoms:
255            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
256            bond_lengths = cls._BondLength\
257                .calculate(mayer_bond_orders,
258                           coordinates_of_atoms,
259                           item.atom_1, item.atom_2,
260                           item.MBO_max, item.MBO_min,
261                           item.id)
262            self.bond_lengths.update({item.id: bond_lengths})
263        return self
264
265    def to_string(self) -> str:
266        """Make string from BondLengthFromPairOfAtoms object
267
268        Returns:
269            **str**: String
270
271        """
272        string = ""
273        for bond_length in self.bond_lengths.values():
274            string += bond_length.to_string()
275
276        return string
277
278
279class CovalenceFromPairOfAtoms(Calculations, _FromPairOfAtoms):
280    """Covalence for list of pairs of atoms."""
281    _Covalence: type = Covalence
282    covalence: dict[str, Covalence]
283    """**key** - atom_name, **value** - Covalence object"""
284    _atoms_names: list[str]
285
286    @classmethod
287    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
288                  mayer_bond_orders: MayerBondOrders):
289        """Calculate CovalenceFromPairOfAtoms object.
290
291        Args:
292            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
293            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
294
295        Returns:
296            **CovalenceFromPairOfAtoms**: CovalenceFromPairOfAtoms object.
297
298        """
299        self = cls()
300        self.covalence = {}
301        self._atoms_names = []
302
303        unique_atom_symbols = super()\
304            ._get_unique_atom_symbols(pair_of_atoms)
305
306        for item in unique_atom_symbols:
307            self._atoms_names.append(item)
308            covalence = cls._Covalence\
309                .calculate(mayer_bond_orders, item)
310            self.covalence.update({item: covalence})
311        return self
312
313    def to_string(self) -> str:
314        """Make string from CovalenceFromPairOfAtoms object
315
316        Returns:
317            **str**: String
318
319        """
320        string = ""
321        for connections in self.covalence.values():
322            string += connections\
323                .to_string()
324
325        return string
326
327
328class QiUnitsFromPairOfAtoms(Calculations, Statistics):
329    """Calculate Qⁱ for list of pairs of atoms."""
330    _QiUnits: type = QiUnits
331    qi_units: dict[str, QiUnits]
332    """**key** - bond_id, **value** - QiUnits object"""
333    _atoms_names: list[str]
334
335    @classmethod
336    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
337                  mayer_bond_orders: MayerBondOrders):
338        """Calculate QiUnitsFromPairOfAtoms object.
339
340        Args:
341            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
342            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
343
344        Returns:
345            **QiUnitsFromPairOfAtoms**: QiUnitsFromPairOfAtoms object.
346
347        """
348        self = cls()
349        self.qi_units = {}
350        self._atoms_names = {}
351        for item in pair_of_atoms:
352            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
353            qi_units = cls._QiUnits\
354                .calculate(mayer_bond_orders,
355                           item.atom_1, item.atom_2,
356                           item.MBO_max, item.MBO_min,
357                           item.id)
358
359            self.qi_units.update({item.id: qi_units})
360        return self
361
362    def calculate_statistics(self):
363        """Calculate statistic in **QiUnits** objects."""
364
365        for keys in self.qi_units.keys():
366            self.qi_units[keys].calculate_statistics()
367        return self
368
369    def to_string(self) -> str:
370        """Make string from **QiUnitsFromPairOfAtoms** object
371
372        Returns:
373            **str**: String
374
375        """
376        string = ""
377        for qi_units in self.qi_units.values():
378            string += qi_units\
379                .to_string()
380
381        return string
class HistogramsFromPairOfAtoms(bond_order_processing.calculations.Calculations):
 54class HistogramsFromPairOfAtoms(Calculations):
 55    """Calculate histograms for list of pairs of atoms."""
 56    _Histogram: type = Histogram
 57    histograms: dict[str, Histogram]
 58    """**key** - bond_id, **value** - Histogram object"""
 59    _atoms_names: dict[str, (str, str)]
 60
 61    @classmethod
 62    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
 63                  mayer_bond_orders: MayerBondOrders,
 64                  bins: int):
 65        """Calculate HistogramsFromPairOfAtoms object.
 66
 67        Args:
 68            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
 69            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
 70            bins (int): Number of bins in histogram.
 71
 72        Returns:
 73            **HistogramsFromPairOfAtoms**: HistogramsFromPairOfAtoms object
 74
 75        """
 76        self = cls()
 77        self.histograms = {}
 78        self._atoms_names = {}
 79        for item in pair_of_atoms:
 80            mbos = mayer_bond_orders\
 81                .get_mayer_bond_orders_list_between_two_atoms(
 82                    item.atom_1, item.atom_2)
 83
 84            if type(item.MBO_max) is str:
 85                if item.MBO_max == 'INF':
 86                    mbos = [mbo for mbo in mbos if item.MBO_min < mbo]
 87                else:
 88                    raise ValueError("Wrong type of max_mayer_bond_order!!!!")
 89            else:
 90                mbos = [mbo for mbo in mbos if item.MBO_max > mbo
 91                        and item.MBO_min < mbo]
 92
 93            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
 94            histogram = cls._Histogram.calculate(mbos, bins)
 95            self.histograms.update({item.id: histogram})
 96        return self
 97
 98    def remove_duplicates(self):
 99        """Removes duplicates, which have the same atoms symbols.
100            Use when you perform calculations for list[PairOfAtoms]
101            when ids are different for the same atoms pairs.
102        """
103
104        temp = []
105        for key in list(self._atoms_names.keys()):
106            if self._atoms_names[key] in temp:
107                del self._atoms_names[key]
108                del self.histograms[key]
109            else:
110                temp.append(self._atoms_names[key])
111
112        return self
113
114    def to_string(self) -> str:
115        """Make string from HistogramsFromPairOfAtoms object
116
117        Returns:
118            **str**: String
119
120        """
121        string = ""
122        for key, histogram in self.histograms.items():
123            atom_id_1, atom_id_2 = self._atoms_names[key]
124            string += histogram.to_string(key, atom_id_1, atom_id_2)
125
126        return string

Calculate histograms for list of pairs of atoms.

key - bond_id, value - Histogram object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders, bins: int):
61    @classmethod
62    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
63                  mayer_bond_orders: MayerBondOrders,
64                  bins: int):
65        """Calculate HistogramsFromPairOfAtoms object.
66
67        Args:
68            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
69            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
70            bins (int): Number of bins in histogram.
71
72        Returns:
73            **HistogramsFromPairOfAtoms**: HistogramsFromPairOfAtoms object
74
75        """
76        self = cls()
77        self.histograms = {}
78        self._atoms_names = {}
79        for item in pair_of_atoms:
80            mbos = mayer_bond_orders\
81                .get_mayer_bond_orders_list_between_two_atoms(
82                    item.atom_1, item.atom_2)
83
84            if type(item.MBO_max) is str:
85                if item.MBO_max == 'INF':
86                    mbos = [mbo for mbo in mbos if item.MBO_min < mbo]
87                else:
88                    raise ValueError("Wrong type of max_mayer_bond_order!!!!")
89            else:
90                mbos = [mbo for mbo in mbos if item.MBO_max > mbo
91                        and item.MBO_min < mbo]
92
93            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
94            histogram = cls._Histogram.calculate(mbos, bins)
95            self.histograms.update({item.id: histogram})
96        return self

Calculate HistogramsFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
  • bins (int): Number of bins in histogram.
Returns:

HistogramsFromPairOfAtoms: HistogramsFromPairOfAtoms object

def remove_duplicates(self):
 98    def remove_duplicates(self):
 99        """Removes duplicates, which have the same atoms symbols.
100            Use when you perform calculations for list[PairOfAtoms]
101            when ids are different for the same atoms pairs.
102        """
103
104        temp = []
105        for key in list(self._atoms_names.keys()):
106            if self._atoms_names[key] in temp:
107                del self._atoms_names[key]
108                del self.histograms[key]
109            else:
110                temp.append(self._atoms_names[key])
111
112        return self

Removes duplicates, which have the same atoms symbols. Use when you perform calculations for list[PairOfAtoms] when ids are different for the same atoms pairs.

def to_string(self) -> str:
114    def to_string(self) -> str:
115        """Make string from HistogramsFromPairOfAtoms object
116
117        Returns:
118            **str**: String
119
120        """
121        string = ""
122        for key, histogram in self.histograms.items():
123            atom_id_1, atom_id_2 = self._atoms_names[key]
124            string += histogram.to_string(key, atom_id_1, atom_id_2)
125
126        return string

Make string from HistogramsFromPairOfAtoms object

Returns:

str: String

129class CoordinationNumbersFromPairOfAtoms(Calculations, Statistics):
130    """Calculate coordination numbers for list of pairs of atoms."""
131    _CoordinationNumbers: type = CoordinationNumbers
132    coordination_numbers: list[str, CoordinationNumbers]
133    """**key** - bond_id, **value** - CoordinationNumbers object"""
134    _atoms_names: dict[str, (str, str)]
135
136    @classmethod
137    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
138                  mayer_bond_orders: MayerBondOrders):
139        """Calculate CoordinationNumbersFromPairOfAtoms object.
140
141        Args:
142            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
143            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
144
145        Returns:
146            **CoordinationNumbersFromPairOfAtoms**: CoordinationNumbersFromPairOfAtoms object.
147
148        """
149        self = cls()
150        self.coordination_numbers = {}
151        self._atoms_names = {}
152        for item in pair_of_atoms:
153            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
154            coordination = cls._CoordinationNumbers\
155                .calculate(mayer_bond_orders,
156                           item.atom_1, item.atom_2,
157                           item.MBO_max, item.MBO_min,
158                           item.id)
159            self.coordination_numbers.update({item.id: coordination})
160        return self
161
162    def calculate_statistics(self):
163        """Calculate statistic in **CoordinationNumbers** objects."""
164
165        for keys in self.coordination_numbers.keys():
166            self.coordination_numbers[keys].calculate_statistics()
167        return self
168
169    def to_string(self) -> str:
170        """Make string from CoordinationNumbersFromPairOfAtoms object
171
172        Returns:
173            **str**: String
174
175        """
176        string = ""
177        for coordination_numbers in self.coordination_numbers.values():
178            string += coordination_numbers\
179                .to_string()
180
181        return string

Calculate coordination numbers for list of pairs of atoms.

key - bond_id, value - CoordinationNumbers object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders):
136    @classmethod
137    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
138                  mayer_bond_orders: MayerBondOrders):
139        """Calculate CoordinationNumbersFromPairOfAtoms object.
140
141        Args:
142            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
143            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
144
145        Returns:
146            **CoordinationNumbersFromPairOfAtoms**: CoordinationNumbersFromPairOfAtoms object.
147
148        """
149        self = cls()
150        self.coordination_numbers = {}
151        self._atoms_names = {}
152        for item in pair_of_atoms:
153            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
154            coordination = cls._CoordinationNumbers\
155                .calculate(mayer_bond_orders,
156                           item.atom_1, item.atom_2,
157                           item.MBO_max, item.MBO_min,
158                           item.id)
159            self.coordination_numbers.update({item.id: coordination})
160        return self

Calculate CoordinationNumbersFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
Returns:

CoordinationNumbersFromPairOfAtoms: CoordinationNumbersFromPairOfAtoms object.

def calculate_statistics(self):
162    def calculate_statistics(self):
163        """Calculate statistic in **CoordinationNumbers** objects."""
164
165        for keys in self.coordination_numbers.keys():
166            self.coordination_numbers[keys].calculate_statistics()
167        return self

Calculate statistic in CoordinationNumbers objects.

def to_string(self) -> str:
169    def to_string(self) -> str:
170        """Make string from CoordinationNumbersFromPairOfAtoms object
171
172        Returns:
173            **str**: String
174
175        """
176        string = ""
177        for coordination_numbers in self.coordination_numbers.values():
178            string += coordination_numbers\
179                .to_string()
180
181        return string

Make string from CoordinationNumbersFromPairOfAtoms object

Returns:

str: String

class ConnectionsFromPairOfAtoms(bond_order_processing.calculations.Calculations):
184class ConnectionsFromPairOfAtoms(Calculations):
185    """Calculate connections for list of pairs of atoms."""
186    _Connections: type = Connections
187    connections: dict[str, Histogram]
188    """**key** - bond_id, **value** - Connections object"""
189    _atoms_names: dict[str, (str, str)]
190
191    @classmethod
192    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
193                  mayer_bond_orders: MayerBondOrders):
194        """Calculate ConnectionsFromPairOfAtoms object.
195
196        Args:
197            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
198            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
199
200        Returns:
201            **ConnectionsFromPairOfAtoms**: ConnectionsFromPairOfAtoms object.
202
203        """
204        self = cls()
205        self.connections = {}
206        self._atoms_names = {}
207        for item in pair_of_atoms:
208            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
209            connections = cls._Connections\
210                .calculate(mayer_bond_orders,
211                           item.atom_1, pair_of_atoms)
212            self.connections.update({item.id: connections})
213        return self
214
215    def to_string(self) -> str:
216        """Make string from ConnectionsFromPairOfAtoms object
217
218        Returns:
219            **str**: String
220
221        """
222        string = ""
223        for connections in self.connections.values():
224            string += connections\
225                .to_string()
226
227        return string

Calculate connections for list of pairs of atoms.

key - bond_id, value - Connections object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders):
191    @classmethod
192    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
193                  mayer_bond_orders: MayerBondOrders):
194        """Calculate ConnectionsFromPairOfAtoms object.
195
196        Args:
197            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
198            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
199
200        Returns:
201            **ConnectionsFromPairOfAtoms**: ConnectionsFromPairOfAtoms object.
202
203        """
204        self = cls()
205        self.connections = {}
206        self._atoms_names = {}
207        for item in pair_of_atoms:
208            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
209            connections = cls._Connections\
210                .calculate(mayer_bond_orders,
211                           item.atom_1, pair_of_atoms)
212            self.connections.update({item.id: connections})
213        return self

Calculate ConnectionsFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
Returns:

ConnectionsFromPairOfAtoms: ConnectionsFromPairOfAtoms object.

def to_string(self) -> str:
215    def to_string(self) -> str:
216        """Make string from ConnectionsFromPairOfAtoms object
217
218        Returns:
219            **str**: String
220
221        """
222        string = ""
223        for connections in self.connections.values():
224            string += connections\
225                .to_string()
226
227        return string

Make string from ConnectionsFromPairOfAtoms object

Returns:

str: String

class BondLengthFromPairOfAtoms(bond_order_processing.calculations.Calculations):
230class BondLengthFromPairOfAtoms(Calculations):
231    """Calculate bonds lengths for list of pairs of atoms."""
232    _BondLength: type = BondLength
233    bond_lengths: dict[str, BondLength]
234    """**key** - bond_id, **value** - BondLength object"""
235    _atoms_names: dict[str, (str, str)]
236
237    @classmethod
238    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
239                  mayer_bond_orders: MayerBondOrders,
240                  coordinates_of_atoms: CoordinatesOfAtoms) -> type:
241        """Calculate BondLengthFromPairOfAtoms object.
242
243        Args:
244            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
245            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
246            coordinates_of_atoms (CoordinatesOfAtoms): CoordinatesOfAtoms.
247
248        Returns:
249            **BondLengthFromPairOfAtoms**: BondLengthFromPairOfAtoms object.
250
251        """
252        self = cls()
253        self.bond_lengths = {}
254        self._atoms_names = {}
255        for item in pair_of_atoms:
256            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
257            bond_lengths = cls._BondLength\
258                .calculate(mayer_bond_orders,
259                           coordinates_of_atoms,
260                           item.atom_1, item.atom_2,
261                           item.MBO_max, item.MBO_min,
262                           item.id)
263            self.bond_lengths.update({item.id: bond_lengths})
264        return self
265
266    def to_string(self) -> str:
267        """Make string from BondLengthFromPairOfAtoms object
268
269        Returns:
270            **str**: String
271
272        """
273        string = ""
274        for bond_length in self.bond_lengths.values():
275            string += bond_length.to_string()
276
277        return string

Calculate bonds lengths for list of pairs of atoms.

key - bond_id, value - BondLength object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders, coordinates_of_atoms: bond_order_processing.input_data.CoordinatesOfAtoms) -> type:
237    @classmethod
238    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
239                  mayer_bond_orders: MayerBondOrders,
240                  coordinates_of_atoms: CoordinatesOfAtoms) -> type:
241        """Calculate BondLengthFromPairOfAtoms object.
242
243        Args:
244            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
245            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
246            coordinates_of_atoms (CoordinatesOfAtoms): CoordinatesOfAtoms.
247
248        Returns:
249            **BondLengthFromPairOfAtoms**: BondLengthFromPairOfAtoms object.
250
251        """
252        self = cls()
253        self.bond_lengths = {}
254        self._atoms_names = {}
255        for item in pair_of_atoms:
256            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
257            bond_lengths = cls._BondLength\
258                .calculate(mayer_bond_orders,
259                           coordinates_of_atoms,
260                           item.atom_1, item.atom_2,
261                           item.MBO_max, item.MBO_min,
262                           item.id)
263            self.bond_lengths.update({item.id: bond_lengths})
264        return self

Calculate BondLengthFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
  • coordinates_of_atoms (CoordinatesOfAtoms): CoordinatesOfAtoms.
Returns:

BondLengthFromPairOfAtoms: BondLengthFromPairOfAtoms object.

def to_string(self) -> str:
266    def to_string(self) -> str:
267        """Make string from BondLengthFromPairOfAtoms object
268
269        Returns:
270            **str**: String
271
272        """
273        string = ""
274        for bond_length in self.bond_lengths.values():
275            string += bond_length.to_string()
276
277        return string

Make string from BondLengthFromPairOfAtoms object

Returns:

str: String

class CovalenceFromPairOfAtoms(bond_order_processing.calculations.Calculations, _FromPairOfAtoms):
280class CovalenceFromPairOfAtoms(Calculations, _FromPairOfAtoms):
281    """Covalence for list of pairs of atoms."""
282    _Covalence: type = Covalence
283    covalence: dict[str, Covalence]
284    """**key** - atom_name, **value** - Covalence object"""
285    _atoms_names: list[str]
286
287    @classmethod
288    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
289                  mayer_bond_orders: MayerBondOrders):
290        """Calculate CovalenceFromPairOfAtoms object.
291
292        Args:
293            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
294            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
295
296        Returns:
297            **CovalenceFromPairOfAtoms**: CovalenceFromPairOfAtoms object.
298
299        """
300        self = cls()
301        self.covalence = {}
302        self._atoms_names = []
303
304        unique_atom_symbols = super()\
305            ._get_unique_atom_symbols(pair_of_atoms)
306
307        for item in unique_atom_symbols:
308            self._atoms_names.append(item)
309            covalence = cls._Covalence\
310                .calculate(mayer_bond_orders, item)
311            self.covalence.update({item: covalence})
312        return self
313
314    def to_string(self) -> str:
315        """Make string from CovalenceFromPairOfAtoms object
316
317        Returns:
318            **str**: String
319
320        """
321        string = ""
322        for connections in self.covalence.values():
323            string += connections\
324                .to_string()
325
326        return string

Covalence for list of pairs of atoms.

key - atom_name, value - Covalence object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders):
287    @classmethod
288    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
289                  mayer_bond_orders: MayerBondOrders):
290        """Calculate CovalenceFromPairOfAtoms object.
291
292        Args:
293            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
294            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
295
296        Returns:
297            **CovalenceFromPairOfAtoms**: CovalenceFromPairOfAtoms object.
298
299        """
300        self = cls()
301        self.covalence = {}
302        self._atoms_names = []
303
304        unique_atom_symbols = super()\
305            ._get_unique_atom_symbols(pair_of_atoms)
306
307        for item in unique_atom_symbols:
308            self._atoms_names.append(item)
309            covalence = cls._Covalence\
310                .calculate(mayer_bond_orders, item)
311            self.covalence.update({item: covalence})
312        return self

Calculate CovalenceFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
Returns:

CovalenceFromPairOfAtoms: CovalenceFromPairOfAtoms object.

def to_string(self) -> str:
314    def to_string(self) -> str:
315        """Make string from CovalenceFromPairOfAtoms object
316
317        Returns:
318            **str**: String
319
320        """
321        string = ""
322        for connections in self.covalence.values():
323            string += connections\
324                .to_string()
325
326        return string

Make string from CovalenceFromPairOfAtoms object

Returns:

str: String

329class QiUnitsFromPairOfAtoms(Calculations, Statistics):
330    """Calculate Qⁱ for list of pairs of atoms."""
331    _QiUnits: type = QiUnits
332    qi_units: dict[str, QiUnits]
333    """**key** - bond_id, **value** - QiUnits object"""
334    _atoms_names: list[str]
335
336    @classmethod
337    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
338                  mayer_bond_orders: MayerBondOrders):
339        """Calculate QiUnitsFromPairOfAtoms object.
340
341        Args:
342            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
343            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
344
345        Returns:
346            **QiUnitsFromPairOfAtoms**: QiUnitsFromPairOfAtoms object.
347
348        """
349        self = cls()
350        self.qi_units = {}
351        self._atoms_names = {}
352        for item in pair_of_atoms:
353            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
354            qi_units = cls._QiUnits\
355                .calculate(mayer_bond_orders,
356                           item.atom_1, item.atom_2,
357                           item.MBO_max, item.MBO_min,
358                           item.id)
359
360            self.qi_units.update({item.id: qi_units})
361        return self
362
363    def calculate_statistics(self):
364        """Calculate statistic in **QiUnits** objects."""
365
366        for keys in self.qi_units.keys():
367            self.qi_units[keys].calculate_statistics()
368        return self
369
370    def to_string(self) -> str:
371        """Make string from **QiUnitsFromPairOfAtoms** object
372
373        Returns:
374            **str**: String
375
376        """
377        string = ""
378        for qi_units in self.qi_units.values():
379            string += qi_units\
380                .to_string()
381
382        return string

Calculate Qⁱ for list of pairs of atoms.

key - bond_id, value - QiUnits object

@classmethod
def calculate( cls, pair_of_atoms: list[bond_order_processing.calculations.PairOfAtoms], mayer_bond_orders: bond_order_processing.input_data.MayerBondOrders):
336    @classmethod
337    def calculate(cls, pair_of_atoms: list[PairOfAtoms],
338                  mayer_bond_orders: MayerBondOrders):
339        """Calculate QiUnitsFromPairOfAtoms object.
340
341        Args:
342            pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
343            mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
344
345        Returns:
346            **QiUnitsFromPairOfAtoms**: QiUnitsFromPairOfAtoms object.
347
348        """
349        self = cls()
350        self.qi_units = {}
351        self._atoms_names = {}
352        for item in pair_of_atoms:
353            self._atoms_names.update({item.id: (item.atom_1, item.atom_2)})
354            qi_units = cls._QiUnits\
355                .calculate(mayer_bond_orders,
356                           item.atom_1, item.atom_2,
357                           item.MBO_max, item.MBO_min,
358                           item.id)
359
360            self.qi_units.update({item.id: qi_units})
361        return self

Calculate QiUnitsFromPairOfAtoms object.

Arguments:
  • pair_of_atoms (list[PairOfAtoms]): list of PairOfAtoms objects.
  • mayer_bond_orders (MayerBondOrders): MayerBondOrders object.
Returns:

QiUnitsFromPairOfAtoms: QiUnitsFromPairOfAtoms object.

def calculate_statistics(self):
363    def calculate_statistics(self):
364        """Calculate statistic in **QiUnits** objects."""
365
366        for keys in self.qi_units.keys():
367            self.qi_units[keys].calculate_statistics()
368        return self

Calculate statistic in QiUnits objects.

def to_string(self) -> str:
370    def to_string(self) -> str:
371        """Make string from **QiUnitsFromPairOfAtoms** object
372
373        Returns:
374            **str**: String
375
376        """
377        string = ""
378        for qi_units in self.qi_units.values():
379            string += qi_units\
380                .to_string()
381
382        return string

Make string from QiUnitsFromPairOfAtoms object

Returns:

str: String