1 //
2 // Copyright (C) 2018-2020 by Greg Landrum
3 //
4 #ifndef EHTTOOLS_H_20181226
5 #define EHTTOOLS_H_20181226
6 /*! \file
7 
8   \brief Contains an interface to the YaEHMOP extended Hueckel program.
9 
10   \b Note: This interface is experimental and may change from version to
11   version.
12 
13 */
14 
15 #include <RDGeneral/export.h>
16 #include <string>
17 #include <memory>
18 
19 namespace RDKit {
20 class ROMol;
21 namespace EHTTools {
22 
23 struct RDKIT_EHTLIB_EXPORT EHTResults {
24   unsigned int numAtoms;
25   unsigned int numOrbitals;
26   unsigned int numElectrons;
27   std::unique_ptr<double[]> overlapMatrix;
28   std::unique_ptr<double[]> hamiltonianMatrix;
29   std::unique_ptr<double[]> overlapPopulationMatrix;
30   std::unique_ptr<double[]> reducedOverlapPopulationMatrix;
31   std::unique_ptr<double[]> chargeMatrix;
32   std::unique_ptr<double[]> reducedChargeMatrix;
33   std::unique_ptr<double[]> atomicCharges;
34   std::unique_ptr<double[]> orbitalEnergies;
35   double fermiEnergy;
36   double totalEnergy;
37   EHTResults() = default;
38   EHTResults(const EHTResults &) = delete;
39   EHTResults &operator=(const EHTResults &) = delete;
40 };
41 
42 //! Runs an extended Hueckel calculation for a molecule
43 //!   The results are returned in the EHTResults structure
44 RDKIT_EHTLIB_EXPORT bool runMol(
45     const ROMol &mol, EHTResults &results, int confId = -1,
46     bool preserveHamiltonianAndOverlapMatrices = false);
47 
48 }  // namespace EHTTools
49 }  // namespace RDKit
50 #endif
51