From 721a44f217b204e1f4410f7ec7af647d81f21f05 Mon Sep 17 00:00:00 2001
From: Scott Snyder <scott.snyder@cern.ch>
Date: Thu, 21 Apr 2016 14:51:26 +0200
Subject: [PATCH] Suppress unused variable warning from
 CLHEP/Random/Randomize.h. (AtlasSealCLHEP-00-01-13)

	* Tagging AtlasSealCLHEP-00-01-13.
	* AtlasSealCLHEP/CLHEP_Random.h: Suppress unused variable warning
	from CLHEP/Random/Randomize.h.
	* Tagging AtlasSealCLHEP-00-01-12.
	* src/OldCLHEPStreamers.cxx: Remove #define private.
	* Tagging AtlasSealCLHEP-00-01-11.
	* Add unit test for OldCLHEPStreamers.

2016-04-18  scott snyder  <snyder@bnl.gov>

	* Tagging AtlasSealCLHEP-00-01-10.
	* src/AtlasSealCLHEPDict_dict_fixes.cxx: Remove obsolete file
	(fixes cppcheck warnings).
---
 .../AtlasSealCLHEP/CLHEP_Random.h             |   6 +
 Database/AtlasSealCLHEP/CMakeLists.txt        |   9 +-
 Database/AtlasSealCLHEP/cmt/requirements      |   5 +
 .../share/OldCLHEPStreamers_test.ref          |   7 +
 .../src/AtlasSealCLHEPDict_dict_fixes.cxx     | 132 -------------
 .../AtlasSealCLHEP/src/OldCLHEPStreamers.cxx  |  42 ++---
 .../test/OldCLHEPStreamers_test.cxx           | 173 ++++++++++++++++++
 7 files changed, 217 insertions(+), 157 deletions(-)
 create mode 100644 Database/AtlasSealCLHEP/share/OldCLHEPStreamers_test.ref
 delete mode 100755 Database/AtlasSealCLHEP/src/AtlasSealCLHEPDict_dict_fixes.cxx
 create mode 100644 Database/AtlasSealCLHEP/test/OldCLHEPStreamers_test.cxx

diff --git a/Database/AtlasSealCLHEP/AtlasSealCLHEP/CLHEP_Random.h b/Database/AtlasSealCLHEP/AtlasSealCLHEP/CLHEP_Random.h
index d0eda76f9e7..64c492f8246 100755
--- a/Database/AtlasSealCLHEP/AtlasSealCLHEP/CLHEP_Random.h
+++ b/Database/AtlasSealCLHEP/AtlasSealCLHEP/CLHEP_Random.h
@@ -3,6 +3,12 @@
 */
 
 #include "CLHEP/Random/Randomize.h"
+#include "CxxUtils/unused.h"
+
+namespace {
+  // Suppress unused variable warning from clhep header.
+  static const int UNUSED(HepRandomGenActive_x) = CLHEP::HepRandomGenActive;
+}
 
 //----Functions missing in the implementation and required by the dictionary
 //    [ Bug #1806 ] Missing method implementations
diff --git a/Database/AtlasSealCLHEP/CMakeLists.txt b/Database/AtlasSealCLHEP/CMakeLists.txt
index f8cab648725..83580582580 100644
--- a/Database/AtlasSealCLHEP/CMakeLists.txt
+++ b/Database/AtlasSealCLHEP/CMakeLists.txt
@@ -7,7 +7,8 @@ atlas_subdir( AtlasSealCLHEP )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          Database/AthenaPOOL/AthenaPoolServices )
+                          Database/AthenaPOOL/AthenaPoolServices
+                          Control/CxxUtils )
 
 # External dependencies:
 find_package( CLHEP )
@@ -33,3 +34,9 @@ atlas_add_dictionary( AtlasSealCLHEPDict
 atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
 
+atlas_add_test( OldCLHEPStreamers_test
+                SOURCES
+                test/OldCLHEPStreamers_test.cxx
+                INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasSealCLHEP )
+
diff --git a/Database/AtlasSealCLHEP/cmt/requirements b/Database/AtlasSealCLHEP/cmt/requirements
index aa6538ac2d3..3a550af9a59 100755
--- a/Database/AtlasSealCLHEP/cmt/requirements
+++ b/Database/AtlasSealCLHEP/cmt/requirements
@@ -4,6 +4,7 @@ author RD Schaffer <R.D.Schaffer@cern.ch>
 
 use AtlasPolicy AtlasPolicy-*
 use AtlasCLHEP  AtlasCLHEP-* External
+use CxxUtils            CxxUtils-*             Control
 use AthenaPoolServices  AthenaPoolServices-*   Database/AthenaPOOL
 
 
@@ -36,3 +37,7 @@ apply_pattern declare_joboptions files="*.py"
 apply_pattern declare_python_modules files="*.py"
 
 
+private 
+
+use TestTools      TestTools-*         AtlasTest 
+apply_pattern UnitTest_run unit_test=OldCLHEPStreamers
diff --git a/Database/AtlasSealCLHEP/share/OldCLHEPStreamers_test.ref b/Database/AtlasSealCLHEP/share/OldCLHEPStreamers_test.ref
new file mode 100644
index 00000000000..efca4e07663
--- /dev/null
+++ b/Database/AtlasSealCLHEP/share/OldCLHEPStreamers_test.ref
@@ -0,0 +1,7 @@
+testVec3d
+testPoint3d
+testMatrix
+testLorVec
+test3Vector
+testBasicVector
+testTransform3DVector
diff --git a/Database/AtlasSealCLHEP/src/AtlasSealCLHEPDict_dict_fixes.cxx b/Database/AtlasSealCLHEP/src/AtlasSealCLHEPDict_dict_fixes.cxx
deleted file mode 100755
index f17f74bb10f..00000000000
--- a/Database/AtlasSealCLHEP/src/AtlasSealCLHEPDict_dict_fixes.cxx
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// Generated at Mon Jul 11 17:45:44 2005. Do not modify it
-
-#ifdef _WIN32
-#pragma warning ( disable : 4786 )
-#ifndef LCGDICT_STRING 
-#include <string> // Included here since it is sensitive to private->public trick
-#endif
-#endif
-#define private public
-#define protected public
-#include "../AtlasSealCLHEP/AtlasSealCLHEPDict.h"
-#undef private
-#undef protected
-#include "ReflectionBuilder/ReflectionBuilder.h"
-#include "ReflectionBuilder/CollectionProxy.h"
-#include <typeinfo>
-using namespace seal::reflect;
-
-//------Dictionary for class Transform3D -------------------------------
-class HepTransform3D_dict { 
-  public:
-  HepTransform3D_dict();
-  static void* constructor_2212( void* );
-  static void  destructor( void* o ) { ((HepGeom::Transform3D*)o)->~Transform3D(); }
-};
-HepTransform3D_dict::HepTransform3D_dict() {
-  ClassBuilder _c_("HepTransform3D", "", typeid(HepGeom::Transform3D), sizeof(HepGeom::Transform3D),std::vector<const std::type_info*>(), false, NOCONTAINER, 0, PUBLIC);
-  _c_.addField("xx", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->xx_)-64, PROTECTED );
-  _c_.addField("xy", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->xy_)-64, PROTECTED );
-  _c_.addField("xz", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->xz_)-64, PROTECTED );
-  _c_.addField("dx", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->dx_)-64, PROTECTED );
-  _c_.addField("yx", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->yx_)-64, PROTECTED );
-  _c_.addField("yy", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->yy_)-64, PROTECTED );
-  _c_.addField("yz", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->yz_)-64, PROTECTED );
-  _c_.addField("dy", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->dy_)-64, PROTECTED );
-  _c_.addField("zx", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->zx_)-64, PROTECTED );
-  _c_.addField("zy", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->zy_)-64, PROTECTED );
-  _c_.addField("zz", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->zz_)-64, PROTECTED );
-  _c_.addField("dz", "double", "", (size_t)(&((HepGeom::Transform3D*)64)->dz_)-64, PROTECTED );
-  _c_.addMethod("HepTransform3D", "", "HepTransform3D", constructor_2212, PUBLIC);
-  _c_.addMethod("~HepTransform3D", "", destructor, PUBLIC);
-  _c_.build();
-}
-
-//------Stub functions for class Transform3D -------------------------------
-void* HepTransform3D_dict::constructor_2212( void* mem) {
-  return ::new(mem) HepGeom::Transform3D();
-}
-
-//------Dictionary for class HepLorentzVector -------------------------------
-class HepLorentzVector_dict { 
-  public:
-  HepLorentzVector_dict();
-  static void* constructor_7008( void* );
-  static void  destructor( void* o ) { ((CLHEP::HepLorentzVector*)o)->~HepLorentzVector(); }
-};
-HepLorentzVector_dict::HepLorentzVector_dict() {
-  ClassBuilder _c_("HepLorentzVector", "", typeid(CLHEP::HepLorentzVector), sizeof(CLHEP::HepLorentzVector),std::vector<const std::type_info*>(), false, NOCONTAINER, 0, PUBLIC);
-  _c_.addField("pp", "Hep3Vector", "", (size_t)(&((CLHEP::HepLorentzVector*)64)->pp)-64, PRIVATE );
-  _c_.addField("ee", "double", "", (size_t)(&((CLHEP::HepLorentzVector*)64)->ee)-64, PRIVATE );
-  _c_.addMethod("HepLorentzVector", "", "HepLorentzVector", constructor_7008, PUBLIC);
-  _c_.addMethod("~HepLorentzVector", "", destructor, PUBLIC);
-  _c_.build();
-}
-
-//------Stub functions for class HepLorentzVector -------------------------------
-void* HepLorentzVector_dict::constructor_7008( void* mem) {
-  return ::new(mem) CLHEP::HepLorentzVector();
-}
-
-
-//------Dictionary for class Hep3Vector -------------------------------
-class Hep3Vector_dict { 
-  public:
-  Hep3Vector_dict();
-  static void* constructor_x46( void* );
-  static void  destructor( void* o ) { ((CLHEP::Hep3Vector*)o)->~Hep3Vector(); }
-};
-Hep3Vector_dict::Hep3Vector_dict() {
-  ClassBuilder _c_("Hep3Vector", "", typeid(CLHEP::Hep3Vector), sizeof(CLHEP::Hep3Vector),std::vector<const std::type_info*>(), false, NOCONTAINER, 0, PUBLIC);
-  _c_.addField("dx", "double", "", (size_t)(&((CLHEP::Hep3Vector*)64)->dx)-64, PROTECTED );
-  _c_.addField("dy", "double", "", (size_t)(&((CLHEP::Hep3Vector*)64)->dy)-64, PROTECTED );
-  _c_.addField("dz", "double", "", (size_t)(&((CLHEP::Hep3Vector*)64)->dz)-64, PROTECTED );
-  _c_.addMethod("Hep3Vector", "", "CLHEP::Hep3Vector", constructor_x46, PUBLIC);
-  _c_.addMethod("~Hep3Vector", "", destructor, PUBLIC);
-  _c_.build();
-}
-
-//------Stub functions for class Hep3Vector -------------------------------
-
-void* Hep3Vector_dict::constructor_x46( void* mem) {
-  return ::new(mem) CLHEP::Hep3Vector();
-}
-
-//---------  Bootstrap for building classes ------
-
-namespace {
-  struct Dictionaries {
-    Dictionaries() {
-      HepTransform3D_dict();
-      HepLorentzVector_dict();
-      Hep3Vector_dict();
-      Class::resolvePending();
-    }
-  };
-  static Dictionaries instance;
-}
-
-
-//---------  Capabilities specification ------
-
-
-// This file has been generated by lcgdict with the --capabilities option
-static  const char* clnames[] = {
-//--Begin AtlasSealCLHEPDictFix
-    "LCGDict/HepTransform3D",
-    "LCGDict/HepLorentzVector",
-    "LCGDict/Hep3Vector"
-//--End   AtlasSealCLHEPDict
-//--Final End
-};
-
-extern "C" void SEAL_CAPABILITIES (const char**& names, int& n )
-{ 
-  names = clnames;
-  n = sizeof(clnames)/sizeof(char*);
-}
-
diff --git a/Database/AtlasSealCLHEP/src/OldCLHEPStreamers.cxx b/Database/AtlasSealCLHEP/src/OldCLHEPStreamers.cxx
index 97b059c5ae4..d0bc3a6e133 100755
--- a/Database/AtlasSealCLHEP/src/OldCLHEPStreamers.cxx
+++ b/Database/AtlasSealCLHEP/src/OldCLHEPStreamers.cxx
@@ -2,15 +2,9 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-#define private public
-#define protected public
 #include "CLHEP/Matrix/Matrix.h"
 #include "CLHEP/Geometry/Transform3D.h"
-#undef private
-#undef protected
-
 #include "AtlasSealCLHEP/OldCLHEPStreamers.h"
-
 #include <iostream>
 
 
@@ -22,11 +16,12 @@ CLHEPMatrixStreamer::CopyOldToNew(const OldHepMatrix &old_matx, CLHEP::HepMatrix
 //      std::cout << "  matrix nrow="<< old_matx.nrow  << std::endl;
 //      std::cout << "  matrix ncol="<< old_matx.ncol  << std::endl;
 //      std::cout << "  matrix m-size="<< old_matx.m.size()  << std::endl;
-     new_matx.m = old_matx.m;    //   ----   FIXME
-     new_matx.size_ = old_matx.size;
+
      // intentional swap!   somehow necessary for reading root3 data 
-     new_matx.nrow = old_matx.ncol;
-     new_matx.ncol = old_matx.nrow;
+     CLHEP::HepMatrix mat (old_matx.ncol, old_matx.nrow);
+     double* m = &mat[0][0];
+     std::copy (old_matx.m.begin(), old_matx.m.end(), m);
+     std::swap (mat, new_matx);
 } 
 
 
@@ -73,6 +68,14 @@ CLHEPBasicVectorStreamer::CopyOldToNew(const OldBasicVector3D &old_vec, HepGeom:
 
 
 
+namespace {
+class Transform3DInit 
+  : public HepGeom::Transform3D
+{
+public:
+  using HepGeom::Transform3D::setTransform;
+};
+}
   
 
 
@@ -88,20 +91,11 @@ CLHEPTransform3DStreamer::CopyOldToNew(const OldHepTransform3D &old_tr, HepGeom:
   std::cout << "  TRFM= " << old_tr.m5 <<"," << old_tr.m6 <<"," << old_tr.m7 <<"," << old_tr.m8 << std::endl;
   std::cout << "  TRFM= " << old_tr.m9 <<"," << old_tr.m10<<"," << old_tr.m11<<"," << old_tr.m12<< std::endl;
 #endif
-  new_tr.xx_ = old_tr.m4;
-  new_tr.xy_ = old_tr.m5;
-  new_tr.xz_ = old_tr.m6;
-  new_tr.dx_ = old_tr.m1;
-
-  new_tr.yx_ = old_tr.m7;
-  new_tr.yy_ = old_tr.m8;
-  new_tr.yz_ = old_tr.m9;
-  new_tr.dy_ = old_tr.m2;
-  
-  new_tr.zx_ = old_tr.m10;
-  new_tr.zy_ = old_tr.m11;
-  new_tr.zz_ = old_tr.m12;
-  new_tr.dz_ = old_tr.m3;
+  Transform3DInit& new_init = static_cast<Transform3DInit&> (new_tr);
+  new_init.setTransform
+    (old_tr.m4,  old_tr.m5,  old_tr.m6,  old_tr.m1,   // xx, xy, xz, dx
+     old_tr.m7,  old_tr.m8,  old_tr.m9,  old_tr.m2,   // yx, yy, yz, dy
+     old_tr.m10, old_tr.m11, old_tr.m12, old_tr.m3);  // zx, zy, zz, dz
 #if( TRANSF_DBGL > 1 ) 
   std::cout << "  TRFM new= " << new_tr.xx() <<"," << new_tr.xy() <<"," << new_tr.xz() <<"," << new_tr.dx() << std::endl;
   std::cout << "  TRFM new= " << new_tr.yx() <<"," << new_tr.yy() <<"," << new_tr.yz() <<"," << new_tr.dy() << std::endl;
diff --git a/Database/AtlasSealCLHEP/test/OldCLHEPStreamers_test.cxx b/Database/AtlasSealCLHEP/test/OldCLHEPStreamers_test.cxx
new file mode 100644
index 00000000000..f22701f763d
--- /dev/null
+++ b/Database/AtlasSealCLHEP/test/OldCLHEPStreamers_test.cxx
@@ -0,0 +1,173 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// $Id$
+/**
+ * @file AtlasSealCLHEP/test/OldCLHEPStreamers_test.cxx
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Apr, 2016
+ * @brief Regression tests for OldCLHEPStreamers
+ */
+
+
+#undef NDEBUG
+#include "CLHEP/Matrix/Matrix.h"
+#include "CLHEP/Geometry/Transform3D.h"
+#include "AtlasSealCLHEP/OldCLHEPStreamers.h"
+#include <cassert>
+#include <iostream>
+
+
+void testVec3d()
+{
+  std::cout << "testVec3d\n";
+  OldHepVector3D v1;
+  v1.vec = CLHEP::Hep3Vector (3, 4, 5);
+  HepGeom::Vector3D<double> v2;
+  CLHEPVec3dStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.x() == 3);
+  assert (v2.y() == 4);
+  assert (v2.z() == 5);
+}
+
+
+void testPoint3d()
+{
+  std::cout << "testPoint3d\n";
+  OldHepPoint3D v1;
+  v1.setX (10);
+  v1.setY (11);
+  v1.setZ (12);
+  HepGeom::Point3D<double> v2;
+  CLHEPPoint3dStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.x() == 10);
+  assert (v2.y() == 11);
+  assert (v2.z() == 12);
+}
+
+
+class MyMatrix
+  : public CLHEP::HepMatrix
+{
+public:
+  using CLHEP::HepMatrix::num_size;
+};
+
+void testMatrix()
+{
+  std::cout << "testMatrix\n";
+  OldHepMatrix v1;
+  v1.nrow = 3;
+  v1.ncol = 2;
+  v1.size = 6;
+  v1.m.assign ({1,2,3,4,5,6});
+  MyMatrix v2;
+  CLHEPMatrixStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.num_size() == 6);
+  assert (v2.num_row() == 2);
+  assert (v2.num_col() == 3);
+  assert (v2[0][0] == 1);
+  assert (v2[0][1] == 2);
+  assert (v2[0][2] == 3);
+  assert (v2[1][0] == 4);
+  assert (v2[1][1] == 5);
+  assert (v2[1][2] == 6);
+}
+
+
+void testLorVec()
+{
+  std::cout << "testLorVec\n";
+  OldHepLorentzVector v1;
+  v1.ee = 21;
+  v1.pp = CLHEP::Hep3Vector (22, 23, 24);
+  CLHEP::HepLorentzVector v2;
+  CLHEPLorVecStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.e() == 21);
+  assert (v2.x() == 22);
+  assert (v2.y() == 23);
+  assert (v2.z() == 24);
+}
+
+
+void test3Vector()
+{
+  std::cout << "test3Vector\n";
+  OldHep3Vector v1;
+  v1.dx = 31;
+  v1.dy = 32;
+  v1.dz = 33;
+  CLHEP::Hep3Vector v2;
+  CLHEP3VectorStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.x() == 31);
+  assert (v2.y() == 32);
+  assert (v2.z() == 33);
+}
+
+
+void testBasicVector()
+{
+  std::cout << "testBasicVector\n";
+  OldBasicVector3D v1;
+  v1.vec = CLHEP::Hep3Vector (41, 42, 43);
+  HepGeom::BasicVector3D<double> v2 (1, 2, 3);
+  CLHEPBasicVectorStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.x() == 41);
+  assert (v2.y() == 42);
+  assert (v2.z() == 43);
+}
+
+
+void testTransform3DVector()
+{
+  std::cout << "testTransform3DVector\n";
+  OldHepTransform3D v1;
+  v1.m1  = 51;
+  v1.m2  = 52;
+  v1.m3  = 53;
+  v1.m4  = 54;
+  v1.m5  = 55;
+  v1.m6  = 56;
+  v1.m7  = 57;
+  v1.m8  = 58;
+  v1.m9  = 59;
+  v1.m10 = 60;
+  v1.m11 = 61;
+  v1.m12 = 62;
+  HepGeom::Transform3D v2;
+  CLHEPTransform3DStreamer cnv;
+  cnv.CopyOldToNew (v1, v2);
+  assert (v2.dx() == 51);
+  assert (v2.dy() == 52);
+  assert (v2.dz() == 53);
+  assert (v2.xx() == 54);
+  assert (v2.xy() == 55);
+  assert (v2.xz() == 56);
+  assert (v2.yx() == 57);
+  assert (v2.yy() == 58);
+  assert (v2.yz() == 59);
+  assert (v2.zx() == 60);
+  assert (v2.zy() == 61);
+  assert (v2.zz() == 62);
+}
+
+
+int main()
+{
+  testVec3d();
+  testPoint3d();
+  testMatrix();
+  testLorVec();
+  test3Vector();
+  testBasicVector();
+  testTransform3DVector();
+  return 0;
+}
+
-- 
GitLab