Scine::Sparrow  5.0.0
Library for fast and agile quantum chemical calculations with semiempirical methods.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
IRCalculator.h
Go to the documentation of this file.
1 
7 #ifndef SPARROW_IRCALCULATOR_H
8 #define SPARROW_IRCALCULATOR_H
9 
10 #include <Utils/Typenames.h>
11 #include <memory>
12 #include <vector>
13 
14 namespace Scine {
15 namespace Core {
16 class Calculator;
17 class State;
18 } // namespace Core
19 namespace Utils {
20 class AtomCollection;
21 class Results;
22 class NormalModesContainer;
23 class Settings;
24 } // namespace Utils
25 
26 namespace Sparrow {
27 namespace RealTimeSpectroscopy {
28 
29 class Spectrum;
30 
31 class IRCalculator {
32  public:
33  IRCalculator();
34 
35  void initialize(const Utils::ElementTypeCollection& elements);
36  void modifyPositions(const Utils::PositionCollection& positions);
42  Spectrum calculate(const Utils::PositionCollection& position, int structureIndex, std::ostream& outs);
43  const Utils::Settings& settings() const;
44  Utils::Settings& settings();
45  void updateState(std::shared_ptr<Core::State> state);
46  bool gradientAllowsIRCalculation(const Utils::GradientCollection& gradient) const;
47  std::unique_ptr<Utils::AtomCollection> getOptimizedStructure() const;
48 
49  private:
50  Utils::Results calculateHessianAndDipoleGradient();
51  Utils::NormalModesContainer calculateFrequencies(const Utils::HessianMatrix& hessian,
52  const Utils::GradientCollection& gradients = {}) const;
53  Eigen::VectorXd calculateIntensities(const Utils::DipoleGradient& dipoleGradient, const Eigen::MatrixXd& normalModes) const;
54  std::unique_ptr<Utils::PositionCollection> lastPositions_;
55  std::unique_ptr<Utils::HessianMatrix> lastHessian_;
56  std::unique_ptr<Utils::DipoleGradient> lastDipoleGradient_;
57  std::shared_ptr<Core::Calculator> calculator_;
58  std::unique_ptr<Utils::Settings> settings_;
59 };
60 
61 } // namespace RealTimeSpectroscopy
62 } // namespace Sparrow
63 } // namespace Scine
64 
65 #endif // SPARROW_IRCALCULATOR_H
Spectrum calculate(const Utils::PositionCollection &position, int structureIndex, std::ostream &outs)
Calculates an IR spectrum from a set of positions and a gradient. Care must be taken in calling code ...
Definition: IRCalculator.cpp:43