CMS 3D CMS Logo

DDLTrapezoid.cc
Go to the documentation of this file.
7 
8 #include <map>
9 #include <utility>
10 
11 class DDCompactView;
12 
14  : DDLSolid( myreg )
15 {}
16 
17 // Upon encountering an end of the tag, call DDCore's Trap.
18 void
20 {
22 
24 
25  double phi = 0.0;
26  double theta = 0.0;
27  double dy2 = 0.0;
28 
29  if (atts.find("phi") != atts.end())
30  phi = ev.eval(nmspace, atts.find("phi")->second);
31 
32  if (atts.find("theta") != atts.end())
33  theta = ev.eval(nmspace, atts.find("theta")->second);
34 
35  if (atts.find("dy2") != atts.end())
36  dy2 = ev.eval(nmspace, atts.find("dy2")->second);
37  else if (atts.find("dy1") != atts.end())
38  dy2 = ev.eval(nmspace, atts.find("dy1")->second);
39 
40  if (name == "Trapezoid")
41  {
42  DDSolid myTrap =
44  ev.eval(nmspace, atts.find("dz")->second),
45  theta,
46  phi,
47  ev.eval(nmspace, atts.find("h1")->second),
48  ev.eval(nmspace, atts.find("bl1")->second),
49  ev.eval(nmspace, atts.find("tl1")->second),
50  ev.eval(nmspace, atts.find("alp1")->second),
51  ev.eval(nmspace, atts.find("h2")->second),
52  ev.eval(nmspace, atts.find("bl2")->second),
53  ev.eval(nmspace, atts.find("tl2")->second),
54  ev.eval(nmspace, atts.find("alp2")->second));
55  }
56  else if (name == "Trd1")
57  {
58  DDSolid myTrd1 =
60  ev.eval(nmspace, atts.find("dz")->second),
61  0,
62  0,
63  ev.eval(nmspace, atts.find("dy1")->second),
64  ev.eval(nmspace, atts.find("dx1")->second),
65  ev.eval(nmspace, atts.find("dx1")->second),
66  0,
67  dy2,
68  ev.eval(nmspace, atts.find("dx2")->second),
69  ev.eval(nmspace, atts.find("dx2")->second),
70  0 );
71  }
72  else
73  {
74  std::string msg = "\nDDLTrapezoid::processElement failed to process element of name: "
75  + name
76  + ". It can only process Trapezoid and Trd1.";
77  throwError(msg);
78  }
79 
80  DDLSolid::setReference( nmspace, cpv );
81 }
DDLTrapezoid(DDLElementRegistry *myreg)
Definition: DDLTrapezoid.cc:13
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:172
void processElement(const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
Processing the element.
Definition: DDLTrapezoid.cc:19
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:72
Geom::Theta< T > theta() const
void throwError(const std::string &keyMessage) const
format std::string for throw an error.
bool ev
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:80
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:45
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
ClhepEvaluator & evaluator()
static DDSolid trap(const DDName &name, double pDz, double pTheta, double pPhi, double pDy1, double pDx1, double pDx2, double pAlp1, double pDy2, double pDx3, double pDx4, double pAlp2)
Definition: DDSolid.cc:792
DDLSolid processes Box elements.
Definition: DDLSolid.h:30
tuple msg
Definition: mps_check.py:285
double eval(const std::string &ns, const std::string &expr)
The main class for processing parsed elements.
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:79
void setReference(const std::string &nmspace, DDCompactView &cpv)
Definition: DDLSolid.cc:16