File indexing completed on 2023-10-25 09:40:19
0001 #include "DetectorDescription/Parser/src/DDLTrapezoid.h"
0002 #include "DetectorDescription/Core/interface/DDSolid.h"
0003 #include "DetectorDescription/Core/interface/ClhepEvaluator.h"
0004 #include "DetectorDescription/Parser/interface/DDLElementRegistry.h"
0005 #include "DetectorDescription/Parser/src/DDLSolid.h"
0006 #include "DetectorDescription/Parser/src/DDXMLElement.h"
0007
0008 #include <map>
0009 #include <utility>
0010
0011 class DDCompactView;
0012
0013 DDLTrapezoid::DDLTrapezoid(DDLElementRegistry* myreg) : DDLSolid(myreg) {}
0014
0015
0016 void DDLTrapezoid::processElement(const std::string& name, const std::string& nmspace, DDCompactView& cpv) {
0017 ClhepEvaluator& ev = myRegistry_->evaluator();
0018
0019 DDXMLAttribute atts = getAttributeSet();
0020
0021 double phi = 0.0;
0022 double theta = 0.0;
0023 double dy2 = 0.0;
0024
0025 if (atts.find("phi") != atts.end())
0026 phi = ev.eval(nmspace, atts.find("phi")->second);
0027
0028 if (atts.find("theta") != atts.end())
0029 theta = ev.eval(nmspace, atts.find("theta")->second);
0030
0031 if (atts.find("dy2") != atts.end())
0032 dy2 = ev.eval(nmspace, atts.find("dy2")->second);
0033 else if (atts.find("dy1") != atts.end())
0034 dy2 = ev.eval(nmspace, atts.find("dy1")->second);
0035
0036 if (name == "Trapezoid") {
0037 DDSolid myTrap = DDSolidFactory::trap(getDDName(nmspace),
0038 ev.eval(nmspace, atts.find("dz")->second),
0039 theta,
0040 phi,
0041 ev.eval(nmspace, atts.find("h1")->second),
0042 ev.eval(nmspace, atts.find("bl1")->second),
0043 ev.eval(nmspace, atts.find("tl1")->second),
0044 ev.eval(nmspace, atts.find("alp1")->second),
0045 ev.eval(nmspace, atts.find("h2")->second),
0046 ev.eval(nmspace, atts.find("bl2")->second),
0047 ev.eval(nmspace, atts.find("tl2")->second),
0048 ev.eval(nmspace, atts.find("alp2")->second));
0049 } else if (name == "Trd1") {
0050 DDSolid myTrd1 = DDSolidFactory::trap(getDDName(nmspace),
0051 ev.eval(nmspace, atts.find("dz")->second),
0052 0,
0053 0,
0054 ev.eval(nmspace, atts.find("dy1")->second),
0055 ev.eval(nmspace, atts.find("dx1")->second),
0056 ev.eval(nmspace, atts.find("dx1")->second),
0057 0,
0058 dy2,
0059 ev.eval(nmspace, atts.find("dx2")->second),
0060 ev.eval(nmspace, atts.find("dx2")->second),
0061 0);
0062 } else {
0063 std::string msg = "\nDDLTrapezoid::processElement failed to process element of name: " + name +
0064 ". It can only process Trapezoid and Trd1.";
0065 throwError(msg);
0066 }
0067
0068 DDLSolid::setReference(nmspace, cpv);
0069 }