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 
21  pNameSpace = nmspace;
22  pName = name;
23 }
24 
27  if (parent() != "RotationSequence") {
28  std::string axis = atts.find("axis")->second;
29  std::string angle = atts.find("angle")->second;
30 
32  R = processOne(R, axis, angle);
33 
34  if (atts.find("name") == atts.end()) {
35  auto myRealParent = myRegistry_->getElement(parent());
36  DDName pName = myRealParent->getDDName(nmspace);
37  std::string tn = pName.name() + std::string("Rotation");
38  std::vector<std::string> names;
39  names.emplace_back("name");
40 
41  std::vector<std::string> values;
42  values.emplace_back(tn);
43 
44  clear();
45  loadAttributes(name, names, values, nmspace, cpv);
46  }
47  DDRotation rot = DDrot(getDDName(nmspace), std::make_unique<DDRotationMatrix>(R));
48 
49  clear();
50  }
51 }
52 
58  double dAngle = ev.eval(pNameSpace, angle);
59 
60  if (axis == "x") {
61  R = ROOT::Math::RotationX(dAngle);
62  } else if (axis == "y") {
63  R = ROOT::Math::RotationY(dAngle);
64  } else if (axis == "z") {
65  R = ROOT::Math::RotationZ(dAngle);
66  } else {
67  std::string msg = "\nDDLRotationByAxis invalid axis... you must not have validated XML sources! Element is ";
68  msg += pName;
69  throwError(msg);
70  }
71 
72  return R;
73 }
DDXMLElement::parent
const std::string & parent(void) const
access to parent element name
Definition: DDXMLElement.cc:201
DDXMLElement::clear
virtual void clear(void)
clear this element's contents.
Definition: DDXMLElement.cc:40
DDLRotationByAxis::pName
std::string pName
Definition: DDLRotationByAxis.h:36
DDTransform.h
MessageLogger.h
DDrot
DDRotation DDrot(const DDName &name, std::unique_ptr< DDRotationMatrix > rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:67
DDXMLElement::throwError
void throwError(const std::string &keyMessage) const
format std::string for throw an error.
Definition: DDXMLElement.cc:209
DDName
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
ClhepEvaluator.h
DDLRotationByAxis::DDLRotationByAxis
DDLRotationByAxis(DDLElementRegistry *myreg)
Definition: DDLRotationByAxis.cc:18
DDLRotationByAxis::pNameSpace
std::string pNameSpace
Definition: DDLRotationByAxis.h:35
DDLElementRegistry
The main class for processing parsed elements.
Definition: DDLElementRegistry.h:23
ClhepEvaluator
Definition: ClhepEvaluator.h:8
mps_check.msg
tuple msg
Definition: mps_check.py:285
DDXMLElement::loadAttributes
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:23
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
DDXMLElement::getAttributeSet
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:54
DDLElementRegistry::evaluator
ClhepEvaluator & evaluator()
Definition: DDLElementRegistry.h:42
names
const std::string names[nVars_]
Definition: PhotonIDValueMapProducer.cc:122
contentValuesCheck.values
values
Definition: contentValuesCheck.py:38
DDCompactView
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:80
DDLRotationByAxis::processOne
virtual DDRotationMatrix processOne(DDRotationMatrix R, std::string &axis, std::string &angle)
Definition: DDLRotationByAxis.cc:53
DDXMLAttribute
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:45
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DDXMLElement
This is a base class for processing XML elements in the DDD.
Definition: DDXMLElement.h:48
DDLRotationByAxis::processElement
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
Definition: DDLRotationByAxis.cc:25
DDLElementRegistry.h
DDXMLElement::getDDName
const virtual DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:56
DDLElementRegistry::getElement
std::shared_ptr< DDXMLElement > getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
Definition: DDLElementRegistry.cc:42
DDXMLElement.h
DDName.h
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
angle
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
DDRotation
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:57
DDXMLElement::myRegistry_
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:173
DDLRotationByAxis.h
DDLRotationByAxis::preProcessElement
void preProcessElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Called by loadAttributes AFTER attributes are loaded.
Definition: DDLRotationByAxis.cc:20
dttmaxenums::R
Definition: DTTMax.h:29