CMS 3D CMS Logo

DDLRotationByAxis.cc
Go to the documentation of this file.
8 #include "Math/GenVector/RotationX.h"
9 #include "Math/GenVector/RotationY.h"
10 #include "Math/GenVector/RotationZ.h"
11 
12 #include <map>
13 #include <utility>
14 #include <vector>
15 
16 class DDCompactView;
17 
19  : DDXMLElement( myreg )
20 {}
21 
22 void
24  DDCompactView& cpv )
25 {
26  pNameSpace = nmspace;
27  pName = name;
28 }
29 
30 void
32  DDCompactView& cpv )
33 {
35  if (parent() != "RotationSequence")
36  {
37  std::string axis = atts.find("axis")->second;
38  std::string angle = atts.find("angle")->second;
39 
41  R = processOne(R, axis, angle);
42 
43  DDRotationMatrix* ddr = new DDRotationMatrix(R);
44  if (atts.find("name") == atts.end())
45  {
46  auto myRealParent = myRegistry_->getElement(parent());
47  DDName pName = myRealParent->getDDName(nmspace);
48  std::string tn = pName.name() + std::string("Rotation");
49  std::vector<std::string> names;
50  names.emplace_back("name");
51 
52  std::vector<std::string> values;
53  values.emplace_back(tn);
54 
55  clear();
56  loadAttributes(name, names, values, nmspace, cpv);
57  }
58  DDRotation rot = DDrot(getDDName(nmspace), ddr);
59 
60  clear();
61  }
62  else { } //let the parent handle the clearing, etc.
63 }
64 
67 {
72  double dAngle = ev.eval(pNameSpace, angle);
73 
74  if ( axis == "x") {
75  R = ROOT::Math::RotationX(dAngle);
76  }
77  else if ( axis == "y" ) {
78  R = ROOT::Math::RotationY(dAngle);
79  }
80  else if ( axis =="z" ) {
81  R = ROOT::Math::RotationZ(dAngle);
82  }
83  else {
84  std::string msg = "\nDDLRotationByAxis invalid axis... you must not have validated XML sources! Element is ";
85  msg += pName;
86  throwError(msg);
87  }
88 
89  return R;
90 }
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:172
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:72
void throwError(const std::string &keyMessage) const
format std::string for throw an error.
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
const std::string & parent(void) const
access to parent element name
bool ev
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:83
const std::string names[nVars_]
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:45
DDLRotationByAxis(DDLElementRegistry *myreg)
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:67
std::string pNameSpace
void loadAttributes(const std::string &elemName, const std::vector< std::string > &names, const std::vector< std::string > &values, const std::string &nmspace, DDCompactView &cpv)
Load the element attributes.
Definition: DDXMLElement.cc:35
virtual DDRotationMatrix processOne(DDRotationMatrix R, std::string &axis, std::string &angle)
ClhepEvaluator & evaluator()
std::shared_ptr< DDXMLElement > getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
DDRotation DDrot(const DDName &name, DDRotationMatrix *rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:90
This is a base class for processing XML elements in the DDD.
Definition: DDXMLElement.h:48
tuple msg
Definition: mps_check.py:277
double eval(const std::string &ns, const std::string &expr)
The main class for processing parsed elements.
virtual void clear(void)
clear this element&#39;s contents.
Definition: DDXMLElement.cc:54
void preProcessElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Called by loadAttributes AFTER attributes are loaded.
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:79
const std::string & name() const
Returns the name.
Definition: DDName.cc:88
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11