Program Listing for File experiment.hpp

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

#pragma once
#include <Eigen/Dense>
#include <dx2/beam.hpp>
#include <dx2/crystal.hpp>
#include <dx2/detector.hpp>
#include <dx2/goniometer.hpp>
#include <dx2/imagesequence.hpp>
#include <dx2/scan.hpp>
#include <dx2/utils.hpp>
#include <nlohmann/json.hpp>

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

class Experiment {
public:
  Experiment() = default;
  Experiment(const json &experiment_data);
  json to_json() const;

  Beam &beam();
  const Beam &beam() const;

  const std::string &identifier() const;
  const Goniometer &goniometer() const;
  Scan &scan();
  Detector &detector();
  Crystal &crystal();
  ImageSequence &imagesequence();
  void set_crystal(Crystal crystal);
  void set_beam(Beam beam);
  void set_scan(Scan scan);
  void set_detector(Detector detector);
  void set_goniometer(Goniometer goniometer);
  void set_imagesequence(ImageSequence imagesequence);
  void set_identifier(std::string identifier);
  void generate_identifier();

protected:
  Beam _beam{};
  Scan _scan{};
  Goniometer _goniometer{};
  Detector _detector{};
  Crystal _crystal{};
  ImageSequence _imagesequence{};
  std::string _identifier{};
};