Program Listing for File crystal.hpp

↰ Return to documentation for file (include/dx2/crystal.hpp)

#pragma once
#include "dx2/utils.hpp"
#include <Eigen/Dense>
#include <gemmi/cellred.hpp>
#include <gemmi/math.hpp>
#include <gemmi/symmetry.hpp>
#include <gemmi/unitcell.hpp>
#include <math.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;
using Eigen::Matrix3d;
using Eigen::Vector3d;

Matrix3d Matrix3d_from_gemmi_cb(gemmi::Op cb);

class Crystal {
public:
  Crystal() = default;
  Crystal(Vector3d a, Vector3d b, Vector3d c, gemmi::SpaceGroup space_group);
  Crystal(json crystal_data);
  Crystal(Matrix3d A, gemmi::SpaceGroup space_group);
  const gemmi::UnitCell &get_unit_cell() const;
  const gemmi::SpaceGroup &get_space_group() const;
  Matrix3d get_A_matrix() const;
  Matrix3d get_U_matrix() const;
  Matrix3d get_B_matrix() const;
  void niggli_reduce();
  void set_A_matrix(Matrix3d A);
  json to_json() const;

protected:
  void init_from_abc(Vector3d a, Vector3d b, Vector3d c);
  gemmi::SpaceGroup space_group_;
  gemmi::UnitCell unit_cell_;
  Matrix3d B_;
  Matrix3d A_;
  Matrix3d U_;
};