From 839fec7cffefce6d8e5a4ef99f3eea80a76cfb4f Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Thu, 15 Sep 2016 13:29:40 +0200
Subject: [PATCH] Remove translating Transform3D back and forth in
 FormFactorDecoratorRotation::clone()

---
 .../FormFactorDecoratorRotation.cpp                 | 13 +++++++++----
 .../FormFactorDecoratorRotation.h                   |  2 ++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp
index 33725b23fbf..768d7fe8cd2 100644
--- a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp
+++ b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp
@@ -27,12 +27,9 @@ FormFactorDecoratorRotation::FormFactorDecoratorRotation(
     m_transform = rotation.getTransform3D();
 }
 
-// TODO: can we avoid the conversion from IRotation to Transform3D and back?
-
 FormFactorDecoratorRotation* FormFactorDecoratorRotation::clone() const
 {
-    std::unique_ptr<IRotation> P_rotation(IRotation::createRotation(m_transform));
-    return new FormFactorDecoratorRotation(*mp_form_factor, *P_rotation);
+    return new FormFactorDecoratorRotation(*mp_form_factor, m_transform);
 }
 
 complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo& wavevectors) const
@@ -47,6 +44,14 @@ Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &
     return mp_form_factor->evaluatePol(rotated_wavevectors);
 }
 
+FormFactorDecoratorRotation::FormFactorDecoratorRotation(const IFormFactor &form_factor,
+                                                         const Transform3D &transform)
+    : IFormFactorDecorator(form_factor)
+{
+    setName(BornAgain::FormFactorDecoratorRotationType);
+    m_transform = transform;
+}
+
 WavevectorInfo FormFactorDecoratorRotation::rotate_wavevectors(
         const WavevectorInfo& wavevectors) const
 {
diff --git a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h
index 5103f14f6d0..5c810be023a 100644
--- a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h
+++ b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h
@@ -40,6 +40,8 @@ public:
 
 private:
     Transform3D m_transform;
+    //! Private constructor for cloning.
+    FormFactorDecoratorRotation(const IFormFactor &form_factor, const Transform3D &transform);
     WavevectorInfo rotate_wavevectors(const WavevectorInfo& wavevectors) const;
 };
 
-- 
GitLab