19 #include "xercesc/parsers/XercesDOMParser.hpp" 20 #include "xercesc/dom/DOM.hpp" 21 #include "xercesc/sax/HandlerBase.hpp" 22 #include "xercesc/util/XMLString.hpp" 23 #include "xercesc/util/PlatformUtils.hpp" 24 #include "xercesc/util/XercesDefs.hpp" 51 str_name = XMLString::transcode(
"name");
72 str_rawId = XMLString::transcode(
"rawId");
73 str_wheel = XMLString::transcode(
"wheel");
77 str_layer = XMLString::transcode(
"layer");
79 str_ring = XMLString::transcode(
"ring");
81 str_axisx = XMLString::transcode(
"axisx");
82 str_axisy = XMLString::transcode(
"axisy");
83 str_axisz = XMLString::transcode(
"axisz");
84 str_angle = XMLString::transcode(
"angle");
85 str_x = XMLString::transcode(
"x");
86 str_y = XMLString::transcode(
"y");
87 str_z = XMLString::transcode(
"z");
88 str_phix = XMLString::transcode(
"phix");
89 str_phiy = XMLString::transcode(
"phiy");
90 str_phiz = XMLString::transcode(
"phiz");
91 str_alpha = XMLString::transcode(
"alpha");
92 str_beta = XMLString::transcode(
"beta");
93 str_gamma = XMLString::transcode(
"gamma");
94 str_rphi = XMLString::transcode(
"rphi");
95 str_phi = XMLString::transcode(
"phi");
96 str_xx = XMLString::transcode(
"xx");
97 str_xy = XMLString::transcode(
"xy");
98 str_xz = XMLString::transcode(
"xz");
99 str_xa = XMLString::transcode(
"xa");
100 str_xb = XMLString::transcode(
"xb");
101 str_xc = XMLString::transcode(
"xc");
102 str_yy = XMLString::transcode(
"yy");
103 str_yz = XMLString::transcode(
"yz");
104 str_ya = XMLString::transcode(
"ya");
105 str_yb = XMLString::transcode(
"yb");
106 str_yc = XMLString::transcode(
"yc");
107 str_zz = XMLString::transcode(
"zz");
108 str_za = XMLString::transcode(
"za");
109 str_zb = XMLString::transcode(
"zb");
110 str_zc = XMLString::transcode(
"zc");
111 str_aa = XMLString::transcode(
"aa");
112 str_ab = XMLString::transcode(
"ab");
113 str_ac = XMLString::transcode(
"ac");
114 str_bb = XMLString::transcode(
"bb");
115 str_bc = XMLString::transcode(
"bc");
116 str_cc = XMLString::transcode(
"cc");
117 str_none = XMLString::transcode(
"none");
118 str_ideal = XMLString::transcode(
"ideal");
220 for (align::Alignables::const_iterator ali = alignables.begin(); ali != alignables.end(); ++ali) {
227 alignableNavigator[(*ali)->geomDetId().rawId()] = *ali;
236 align::Alignables::const_iterator alignable = alignables.begin();
237 align::Alignables::const_iterator ideal = ideals.begin();
239 while (alignable != alignables.end() && ideal != ideals.end()) {
240 alitoideal[*alignable] = *ideal;
242 fillAliToIdeal(alitoideal, (*alignable)->components(), (*ideal)->components());
248 if (alignable != alignables.end() || ideal != ideals.end()) {
250 <<
"alignable and ideal-alignable trees are out of sync (this should never happen)";
259 std::map<unsigned int, Alignable *> alignableNavigator;
264 std::map<unsigned int, Alignable *> ideal_alignableNavigator;
265 recursiveGetId(ideal_alignableNavigator, ideal_alignableMuon->DTBarrel());
266 recursiveGetId(ideal_alignableNavigator, ideal_alignableMuon->CSCEndcaps());
270 }
catch (
const XMLException &toCatch) {
271 throw cms::Exception(
"XMLException") <<
"Xerces XML parser threw an exception on initialization." << std::endl;
274 XercesDOMParser *
parser =
new XercesDOMParser();
275 parser->setValidationScheme(XercesDOMParser::Val_Always);
277 XERCES_CPP_NAMESPACE::ErrorHandler *errHandler = (XERCES_CPP_NAMESPACE::ErrorHandler *)(
new HandlerBase());
278 parser->setErrorHandler(errHandler);
282 }
catch (
const XMLException &toCatch) {
283 char *message = XMLString::transcode(toCatch.getMessage());
284 throw cms::Exception(
"XMLException") <<
"Xerces XML parser threw this exception: " << message << std::endl;
285 }
catch (
const DOMException &toCatch) {
286 char *message = XMLString::transcode(toCatch.msg);
287 throw cms::Exception(
"XMLException") <<
"Xerces XML parser threw this exception: " << message << std::endl;
288 }
catch (
const SAXException &toCatch) {
289 char *message = XMLString::transcode(toCatch.getMessage());
290 throw cms::Exception(
"XMLException") <<
"Xerces XML parser threw this exception: " << message << std::endl;
293 DOMDocument *
doc = parser->getDocument();
294 DOMElement *node_MuonAlignment = doc->getDocumentElement();
296 DOMNodeList *operations = doc->getElementsByTagName(
str_operation);
298 std::map<Alignable *, Alignable *> alitoideal;
303 std::map<std::string, std::map<Alignable *, bool> > alicollections;
304 for (
unsigned int i = 0;
i < collections->getLength();
i++) {
305 DOMElement *
collection = (DOMElement *)(collections->item(
i));
306 if (collection->getParentNode() == node_MuonAlignment) {
307 DOMNodeList *
children = collection->getChildNodes();
309 DOMAttr *node_name = collection->getAttributeNode(
str_name);
310 if (node_name ==
nullptr) {
311 throw cms::Exception(
"XMLException") <<
"<collection> requires a name attribute" << std::endl;
313 char *ascii_name = XMLString::transcode(node_name->getValue());
317 std::map<Alignable *, bool> aliset;
318 for (
unsigned int j = 0;
j < children->getLength();
j++) {
319 DOMNode *node = children->item(
j);
321 if (node->getNodeType() == DOMNode::ELEMENT_NODE) {
322 Alignable *ali =
getNode(alignableNavigator, (DOMElement *)(node), alignableObjectId);
323 if (ali ==
nullptr) {
324 throw cms::Exception(
"XMLException") <<
"<collection> must contain only alignables" << std::endl;
331 alicollections[
name] = aliset;
335 for (
unsigned int i = 0;
i < operations->getLength();
i++) {
336 DOMElement *operation = (DOMElement *)(operations->item(
i));
337 if (operation->getParentNode() != node_MuonAlignment) {
338 throw cms::Exception(
"XMLException") <<
"All operations must be top-level elements" << std::endl;
341 DOMNodeList *
children = operation->getChildNodes();
343 std::map<Alignable *, bool> aliset;
344 std::vector<DOMNode *> nodesToRemove;
345 for (
unsigned int j = 0;
j < children->getLength();
j++) {
346 DOMNode *node = children->item(
j);
348 if (node->getNodeType() == DOMNode::ELEMENT_NODE) {
349 Alignable *ali =
getNode(alignableNavigator, (DOMElement *)(node), alignableObjectId);
350 if (ali !=
nullptr) {
352 nodesToRemove.push_back(node);
356 DOMAttr *node_name = ((DOMElement *)(node))->getAttributeNode(
str_name);
357 if (node_name ==
nullptr) {
358 throw cms::Exception(
"XMLException") <<
"<collection> requires a name attribute" << std::endl;
360 char *ascii_name = XMLString::transcode(node_name->getValue());
364 std::map<std::string, std::map<Alignable *, bool> >::const_iterator alicollections_iter =
365 alicollections.find(name);
366 if (alicollections_iter == alicollections.end()) {
368 <<
"<collection name=\"" << name <<
"\"> hasn't been defined" << std::endl;
371 for (std::map<Alignable *, bool>::const_iterator aliiter = alicollections_iter->second.begin();
372 aliiter != alicollections_iter->second.end();
374 aliset[aliiter->first] =
true;
377 nodesToRemove.push_back(node);
387 for (std::vector<DOMNode *>::const_iterator node = nodesToRemove.begin(); node != nodesToRemove.end(); ++node) {
388 operation->removeChild(*node);
390 children = operation->getChildNodes();
392 for (
unsigned int j = 0;
j < children->getLength();
j++) {
393 DOMNode *node = children->item(
j);
394 if (node->getNodeType() == DOMNode::ELEMENT_NODE) {
400 do_setape((DOMElement *)(node), aliset, alitoideal);
428 char *message = XMLString::transcode(node->getNodeName());
429 throw cms::Exception(
"XMLException") <<
"Unrecognized operation: \"" << message <<
"\"" << std::endl;
441 delete ideal_alignableMuon;
442 return alignableMuon;
446 const XERCES_CPP_NAMESPACE::DOMElement *node,
475 std::map<unsigned int, Alignable *> &alignableNavigator,
476 const XERCES_CPP_NAMESPACE::DOMElement *node,
478 unsigned int rawId = 0;
480 DOMAttr *node_rawId = node->getAttributeNode(
str_rawId);
481 if (node_rawId !=
nullptr) {
483 rawId = XMLString::parseInt(node_rawId->getValue());
484 }
catch (
const XMLException &toCatch) {
485 throw cms::Exception(
"XMLException") <<
"Value of \"rawId\" must be an integer" << std::endl;
489 wheel = station = sector = superlayer = layer = 1;
492 DOMAttr *node_wheel = node->getAttributeNode(
str_wheel);
493 if (node_wheel ==
nullptr)
494 throw cms::Exception(
"XMLException") <<
"DT node is missing required \"wheel\" attribute" << std::endl;
496 wheel = XMLString::parseInt(node_wheel->getValue());
497 }
catch (
const XMLException &toCatch) {
498 throw cms::Exception(
"XMLException") <<
"Value of \"wheel\" must be an integer" << std::endl;
502 DOMAttr *node_station = node->getAttributeNode(
str_station);
503 if (node_station ==
nullptr)
504 throw cms::Exception(
"XMLException") <<
"DT node is missing required \"station\" attribute" << std::endl;
506 station = XMLString::parseInt(node_station->getValue());
507 }
catch (
const XMLException &toCatch) {
508 throw cms::Exception(
"XMLException") <<
"Value of \"station\" must be an integer" << std::endl;
512 DOMAttr *node_sector = node->getAttributeNode(
str_sector);
513 if (node_sector ==
nullptr)
514 throw cms::Exception(
"XMLException") <<
"DT node is missing required \"sector\" attribute" << std::endl;
516 sector = XMLString::parseInt(node_sector->getValue());
517 }
catch (
const XMLException &toCatch) {
518 throw cms::Exception(
"XMLException") <<
"Value of \"sector\" must be an integer" << std::endl;
522 DOMAttr *node_superlayer = node->getAttributeNode(
str_superlayer);
523 if (node_superlayer ==
nullptr)
525 <<
"DT node is missing required \"superlayer\" attribute" << std::endl;
527 superlayer = XMLString::parseInt(node_superlayer->getValue());
528 }
catch (
const XMLException &toCatch) {
529 throw cms::Exception(
"XMLException") <<
"Value of \"superlayer\" must be an integer" << std::endl;
533 DOMAttr *node_layer = node->getAttributeNode(
str_layer);
534 if (node_layer ==
nullptr)
535 throw cms::Exception(
"XMLException") <<
"DT node is missing required \"layer\" attribute" << std::endl;
537 layer = XMLString::parseInt(node_layer->getValue());
538 }
catch (
const XMLException &toCatch) {
539 throw cms::Exception(
"XMLException") <<
"Value of \"layer\" must be an integer" << std::endl;
548 DTLayerId layerId(wheel, station, sector, superlayer, layer);
549 rawId = layerId.
rawId();
552 Alignable *ali = alignableNavigator[rawId];
554 throw cms::Exception(
"XMLException") <<
"rawId \"" << rawId <<
"\" is not recognized" << std::endl;
559 if (ali ==
nullptr) {
561 <<
"rawId \"" << rawId <<
"\" is not a " << alignableObjectId.
idToString(structureType) << std::endl;
568 std::map<unsigned int, Alignable *> &alignableNavigator,
569 const XERCES_CPP_NAMESPACE::DOMElement *node,
573 DOMAttr *node_rawId = node->getAttributeNode(
str_rawId);
574 if (node_rawId !=
nullptr) {
576 rawId = XMLString::parseInt(node_rawId->getValue());
577 }
catch (
const XMLException &toCatch) {
578 throw cms::Exception(
"XMLException") <<
"Value of \"rawId\" must be an integer" << std::endl;
582 endcap = station = ring = chamber = layer = 1;
584 DOMAttr *node_endcap = node->getAttributeNode(
str_endcap);
585 if (node_endcap ==
nullptr)
586 throw cms::Exception(
"XMLException") <<
"CSC node is missing required \"endcap\" attribute" << std::endl;
588 endcap = XMLString::parseInt(node_endcap->getValue());
589 }
catch (
const XMLException &toCatch) {
590 throw cms::Exception(
"XMLException") <<
"Value of \"endcap\" must be an integer" << std::endl;
596 DOMAttr *node_station = node->getAttributeNode(
str_station);
597 if (node_station ==
nullptr)
598 throw cms::Exception(
"XMLException") <<
"CSC node is missing required \"station\" attribute" << std::endl;
600 station = XMLString::parseInt(node_station->getValue());
601 }
catch (
const XMLException &toCatch) {
602 throw cms::Exception(
"XMLException") <<
"Value of \"station\" must be an integer" << std::endl;
606 DOMAttr *node_ring = node->getAttributeNode(
str_ring);
607 if (node_ring ==
nullptr)
608 throw cms::Exception(
"XMLException") <<
"CSC node is missing required \"ring\" attribute" << std::endl;
610 ring = XMLString::parseInt(node_ring->getValue());
611 }
catch (
const XMLException &toCatch) {
612 throw cms::Exception(
"XMLException") <<
"Value of \"ring\" must be an integer" << std::endl;
616 DOMAttr *node_chamber = node->getAttributeNode(
str_chamber);
617 if (node_chamber ==
nullptr)
618 throw cms::Exception(
"XMLException") <<
"CSC node is missing required \"chamber\" attribute" << std::endl;
620 chamber = XMLString::parseInt(node_chamber->getValue());
621 }
catch (
const XMLException &toCatch) {
622 throw cms::Exception(
"XMLException") <<
"Value of \"chamber\" must be an integer" << std::endl;
626 DOMAttr *node_layer = node->getAttributeNode(
str_layer);
627 if (node_layer ==
nullptr)
628 throw cms::Exception(
"XMLException") <<
"CSC node is missing required \"layer\" attribute" << std::endl;
630 layer = XMLString::parseInt(node_layer->getValue());
631 }
catch (
const XMLException &toCatch) {
632 throw cms::Exception(
"XMLException") <<
"Value of \"layer\" must be an integer" << std::endl;
640 CSCDetId layerId(endcap, station, ring, chamber, layer);
641 rawId = layerId.
rawId();
644 Alignable *ali = alignableNavigator[rawId];
646 throw cms::Exception(
"XMLException") <<
"rawId \"" << rawId <<
"\" is not recognized" << std::endl;
651 if (ali ==
nullptr) {
653 <<
"rawId \"" << rawId <<
"\" is not a " << alignableObjectId.
idToString(structureType) << std::endl;
660 unsigned int len = XMLString::stringLen(str);
661 char *cstr = XMLString::transcode(str);
662 std::stringstream errmessage;
663 errmessage <<
"Value of \"" << attribute <<
"\" must be a double, not \"" << cstr <<
"\"" << std::endl;
668 if (cstr[i] ==
'-') {
671 }
else if (cstr[i] ==
'+')
676 while (cstr[i] !=
'.' && cstr[i] !=
'e' && cstr[i] !=
'E' && i < len) {
677 if (cstr[i] <
'0' || cstr[i] >
'9') {
683 output += cstr[
i] -
'0';
687 if (cstr[i] ==
'.') {
691 while (cstr[i] !=
'e' && cstr[i] !=
'E' && i < len) {
692 if (cstr[i] <
'0' || cstr[i] >
'9') {
697 output += (cstr[
i] -
'0') * place;
703 if (cstr[i] ==
'e' || cstr[i] ==
'E') {
707 bool expminus =
false;
708 if (cstr[i] ==
'-') {
711 }
else if (cstr[i] ==
'+')
715 if (cstr[i] <
'0' || cstr[i] >
'9') {
721 exponent += cstr[
i] -
'0';
728 output *=
pow(10., exponent);
739 std::map<Alignable *, bool> &aliset,
740 std::map<Alignable *, Alignable *> &alitoideal)
const {
741 DOMAttr *node_relativeto = node->getAttributeNode(
str_relativeto);
742 if (node_relativeto ==
nullptr)
743 throw cms::Exception(
"XMLException") <<
"<setposition> is missing required \"relativeto\" attribute" << std::endl;
753 char *message = XMLString::transcode(node_relativeto->getValue());
754 throw cms::Exception(
"XMLException") <<
"relativeto must be \"none\", \"ideal\", or \"container\", not \"" 755 << message <<
"\"" << std::endl;
758 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
767 if (relativeto == 0) {
770 else if (relativeto == 1) {
778 else if (relativeto == 2 && ali->
mother() !=
nullptr) {
783 oldrot = oldrot * globalRotation.
transposed();
786 double x = oldpos.
x();
787 double y = oldpos.
y();
788 double z = oldpos.
z();
790 double phix = atan2(oldrot.
yz(), oldrot.
zz());
791 double phiy = asin(-oldrot.
xz());
792 double phiz = atan2(oldrot.
xy(), oldrot.
xx());
795 double alpha = oldEulerAngles(1);
796 double beta = oldEulerAngles(2);
797 double gamma = oldEulerAngles(3);
801 DOMAttr *node_x = node->getAttributeNode(
str_x);
802 DOMAttr *node_y = node->getAttributeNode(
str_y);
803 DOMAttr *node_z = node->getAttributeNode(
str_z);
805 if (node_x !=
nullptr)
807 if (node_y !=
nullptr)
809 if (node_z !=
nullptr)
813 DOMAttr *node_phix = node->getAttributeNode(
str_phix);
814 DOMAttr *node_phiy = node->getAttributeNode(
str_phiy);
815 DOMAttr *node_phiz = node->getAttributeNode(
str_phiz);
816 DOMAttr *node_alpha = node->getAttributeNode(
str_alpha);
817 DOMAttr *node_beta = node->getAttributeNode(
str_beta);
818 DOMAttr *node_gamma = node->getAttributeNode(
str_gamma);
821 bool phixyz = (node_phix !=
nullptr || node_phiy !=
nullptr || node_phiz !=
nullptr);
822 bool alphabetagamma = (node_alpha !=
nullptr || node_beta !=
nullptr || node_gamma !=
nullptr);
823 if (phixyz && alphabetagamma)
825 <<
"<setposition> must either have phix, phiy, and phiz or alpha, beta, and gamma, but not both" << std::endl;
826 if (!phixyz && !alphabetagamma)
827 alphabetagamma =
true;
830 if (node_phix !=
nullptr)
832 if (node_phiy !=
nullptr)
834 if (node_phiz !=
nullptr)
843 rot = rotX * rotY * rotZ;
846 else if (alphabetagamma) {
847 if (node_alpha !=
nullptr)
848 alpha =
parseDouble(node_alpha->getValue(),
"alpha");
849 if (node_beta !=
nullptr)
851 if (node_gamma !=
nullptr)
852 gamma =
parseDouble(node_gamma->getValue(),
"gamma");
856 eulerAngles(1) =
alpha;
857 eulerAngles(2) =
beta;
858 eulerAngles(3) =
gamma;
865 if (relativeto == 0) {
869 else if (relativeto == 1) {
882 else if (relativeto == 2) {
886 if (container !=
nullptr) {
937 if (survey !=
nullptr) {
938 matrix6x6 = survey->
errors();
944 std::map<Alignable *, bool> &aliset,
945 std::map<Alignable *, Alignable *> &alitoideal)
const {
946 DOMAttr *node_xx = node->getAttributeNode(
str_xx);
947 DOMAttr *node_xy = node->getAttributeNode(
str_xy);
948 DOMAttr *node_xz = node->getAttributeNode(
str_xz);
949 DOMAttr *node_xa = node->getAttributeNode(
str_xa);
950 DOMAttr *node_xb = node->getAttributeNode(
str_xb);
951 DOMAttr *node_xc = node->getAttributeNode(
str_xc);
952 DOMAttr *node_yy = node->getAttributeNode(
str_yy);
953 DOMAttr *node_yz = node->getAttributeNode(
str_yz);
954 DOMAttr *node_ya = node->getAttributeNode(
str_ya);
955 DOMAttr *node_yb = node->getAttributeNode(
str_yb);
956 DOMAttr *node_yc = node->getAttributeNode(
str_yc);
957 DOMAttr *node_zz = node->getAttributeNode(
str_zz);
958 DOMAttr *node_za = node->getAttributeNode(
str_za);
959 DOMAttr *node_zb = node->getAttributeNode(
str_zb);
960 DOMAttr *node_zc = node->getAttributeNode(
str_zc);
961 DOMAttr *node_aa = node->getAttributeNode(
str_aa);
962 DOMAttr *node_ab = node->getAttributeNode(
str_ab);
963 DOMAttr *node_ac = node->getAttributeNode(
str_ac);
964 DOMAttr *node_bb = node->getAttributeNode(
str_bb);
965 DOMAttr *node_bc = node->getAttributeNode(
str_bc);
966 DOMAttr *node_cc = node->getAttributeNode(
str_cc);
968 if (node_xx ==
nullptr)
969 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xx\" attribute" << std::endl;
970 if (node_xy ==
nullptr)
971 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xy\" attribute" << std::endl;
972 if (node_xz ==
nullptr)
973 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xz\" attribute" << std::endl;
974 if (node_xa ==
nullptr)
975 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xa\" attribute" << std::endl;
976 if (node_xb ==
nullptr)
977 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xb\" attribute" << std::endl;
978 if (node_xc ==
nullptr)
979 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"xc\" attribute" << std::endl;
980 if (node_yy ==
nullptr)
981 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"yy\" attribute" << std::endl;
982 if (node_yz ==
nullptr)
983 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"yz\" attribute" << std::endl;
984 if (node_ya ==
nullptr)
985 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"ya\" attribute" << std::endl;
986 if (node_yb ==
nullptr)
987 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"yb\" attribute" << std::endl;
988 if (node_yc ==
nullptr)
989 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"yc\" attribute" << std::endl;
990 if (node_zz ==
nullptr)
991 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"zz\" attribute" << std::endl;
992 if (node_za ==
nullptr)
993 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"za\" attribute" << std::endl;
994 if (node_zb ==
nullptr)
995 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"zb\" attribute" << std::endl;
996 if (node_zc ==
nullptr)
997 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"zc\" attribute" << std::endl;
998 if (node_aa ==
nullptr)
999 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"aa\" attribute" << std::endl;
1000 if (node_ab ==
nullptr)
1001 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"ab\" attribute" << std::endl;
1002 if (node_ac ==
nullptr)
1003 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"ac\" attribute" << std::endl;
1004 if (node_bb ==
nullptr)
1005 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"bb\" attribute" << std::endl;
1006 if (node_bc ==
nullptr)
1007 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"bc\" attribute" << std::endl;
1008 if (node_cc ==
nullptr)
1009 throw cms::Exception(
"XMLException") <<
"<setape> is missing required \"cc\" attribute" << std::endl;
1012 matrix6x6(0, 0) =
parseDouble(node_xx->getValue(),
"xx");
1013 matrix6x6(0, 1) =
parseDouble(node_xy->getValue(),
"xy");
1014 matrix6x6(0, 2) =
parseDouble(node_xz->getValue(),
"xz");
1015 matrix6x6(0, 3) =
parseDouble(node_xa->getValue(),
"xa");
1016 matrix6x6(0, 4) =
parseDouble(node_xb->getValue(),
"xb");
1017 matrix6x6(0, 5) =
parseDouble(node_xc->getValue(),
"xc");
1018 matrix6x6(1, 1) =
parseDouble(node_yy->getValue(),
"yy");
1019 matrix6x6(1, 2) =
parseDouble(node_yz->getValue(),
"yz");
1020 matrix6x6(1, 3) =
parseDouble(node_ya->getValue(),
"ya");
1021 matrix6x6(1, 4) =
parseDouble(node_yb->getValue(),
"yb");
1022 matrix6x6(1, 5) =
parseDouble(node_yc->getValue(),
"yc");
1023 matrix6x6(2, 2) =
parseDouble(node_zz->getValue(),
"zz");
1024 matrix6x6(2, 3) =
parseDouble(node_za->getValue(),
"za");
1025 matrix6x6(2, 4) =
parseDouble(node_zb->getValue(),
"zb");
1026 matrix6x6(2, 5) =
parseDouble(node_zc->getValue(),
"zc");
1027 matrix6x6(3, 3) =
parseDouble(node_aa->getValue(),
"aa");
1028 matrix6x6(3, 4) =
parseDouble(node_ab->getValue(),
"ab");
1029 matrix6x6(3, 5) =
parseDouble(node_ac->getValue(),
"ac");
1030 matrix6x6(4, 4) =
parseDouble(node_bb->getValue(),
"bb");
1031 matrix6x6(4, 5) =
parseDouble(node_bc->getValue(),
"bc");
1032 matrix6x6(5, 5) =
parseDouble(node_cc->getValue(),
"cc");
1034 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1041 std::map<Alignable *, bool> &aliset,
1042 std::map<Alignable *, Alignable *> &alitoideal)
const {
1043 DOMAttr *node_xx = node->getAttributeNode(
str_xx);
1044 DOMAttr *node_xy = node->getAttributeNode(
str_xy);
1045 DOMAttr *node_xz = node->getAttributeNode(
str_xz);
1046 DOMAttr *node_xa = node->getAttributeNode(
str_xa);
1047 DOMAttr *node_xb = node->getAttributeNode(
str_xb);
1048 DOMAttr *node_xc = node->getAttributeNode(
str_xc);
1049 DOMAttr *node_yy = node->getAttributeNode(
str_yy);
1050 DOMAttr *node_yz = node->getAttributeNode(
str_yz);
1051 DOMAttr *node_ya = node->getAttributeNode(
str_ya);
1052 DOMAttr *node_yb = node->getAttributeNode(
str_yb);
1053 DOMAttr *node_yc = node->getAttributeNode(
str_yc);
1054 DOMAttr *node_zz = node->getAttributeNode(
str_zz);
1055 DOMAttr *node_za = node->getAttributeNode(
str_za);
1056 DOMAttr *node_zb = node->getAttributeNode(
str_zb);
1057 DOMAttr *node_zc = node->getAttributeNode(
str_zc);
1058 DOMAttr *node_aa = node->getAttributeNode(
str_aa);
1059 DOMAttr *node_ab = node->getAttributeNode(
str_ab);
1060 DOMAttr *node_ac = node->getAttributeNode(
str_ac);
1061 DOMAttr *node_bb = node->getAttributeNode(
str_bb);
1062 DOMAttr *node_bc = node->getAttributeNode(
str_bc);
1063 DOMAttr *node_cc = node->getAttributeNode(
str_cc);
1065 if (node_xx ==
nullptr)
1066 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xx\" attribute" << std::endl;
1067 if (node_xy ==
nullptr)
1068 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xy\" attribute" << std::endl;
1069 if (node_xz ==
nullptr)
1070 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xz\" attribute" << std::endl;
1071 if (node_xa ==
nullptr)
1072 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xa\" attribute" << std::endl;
1073 if (node_xb ==
nullptr)
1074 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xb\" attribute" << std::endl;
1075 if (node_xc ==
nullptr)
1076 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"xc\" attribute" << std::endl;
1077 if (node_yy ==
nullptr)
1078 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"yy\" attribute" << std::endl;
1079 if (node_yz ==
nullptr)
1080 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"yz\" attribute" << std::endl;
1081 if (node_ya ==
nullptr)
1082 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"ya\" attribute" << std::endl;
1083 if (node_yb ==
nullptr)
1084 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"yb\" attribute" << std::endl;
1085 if (node_yc ==
nullptr)
1086 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"yc\" attribute" << std::endl;
1087 if (node_zz ==
nullptr)
1088 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"zz\" attribute" << std::endl;
1089 if (node_za ==
nullptr)
1090 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"za\" attribute" << std::endl;
1091 if (node_zb ==
nullptr)
1092 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"zb\" attribute" << std::endl;
1093 if (node_zc ==
nullptr)
1094 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"zc\" attribute" << std::endl;
1095 if (node_aa ==
nullptr)
1096 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"aa\" attribute" << std::endl;
1097 if (node_ab ==
nullptr)
1098 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"ab\" attribute" << std::endl;
1099 if (node_ac ==
nullptr)
1100 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"ac\" attribute" << std::endl;
1101 if (node_bb ==
nullptr)
1102 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"bb\" attribute" << std::endl;
1103 if (node_bc ==
nullptr)
1104 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"bc\" attribute" << std::endl;
1105 if (node_cc ==
nullptr)
1106 throw cms::Exception(
"XMLException") <<
"<setsurveyerr> is missing required \"cc\" attribute" << std::endl;
1109 matrix6x6(0, 0) =
parseDouble(node_xx->getValue(),
"xx");
1110 matrix6x6(0, 1) =
parseDouble(node_xy->getValue(),
"xy");
1111 matrix6x6(0, 2) =
parseDouble(node_xz->getValue(),
"xz");
1112 matrix6x6(0, 3) =
parseDouble(node_xa->getValue(),
"xa");
1113 matrix6x6(0, 4) =
parseDouble(node_xb->getValue(),
"xb");
1114 matrix6x6(0, 5) =
parseDouble(node_xc->getValue(),
"xc");
1115 matrix6x6(1, 1) =
parseDouble(node_yy->getValue(),
"yy");
1116 matrix6x6(1, 2) =
parseDouble(node_yz->getValue(),
"yz");
1117 matrix6x6(1, 3) =
parseDouble(node_ya->getValue(),
"ya");
1118 matrix6x6(1, 4) =
parseDouble(node_yb->getValue(),
"yb");
1119 matrix6x6(1, 5) =
parseDouble(node_yc->getValue(),
"yc");
1120 matrix6x6(2, 2) =
parseDouble(node_zz->getValue(),
"zz");
1121 matrix6x6(2, 3) =
parseDouble(node_za->getValue(),
"za");
1122 matrix6x6(2, 4) =
parseDouble(node_zb->getValue(),
"zb");
1123 matrix6x6(2, 5) =
parseDouble(node_zc->getValue(),
"zc");
1124 matrix6x6(3, 3) =
parseDouble(node_aa->getValue(),
"aa");
1125 matrix6x6(3, 4) =
parseDouble(node_ab->getValue(),
"ab");
1126 matrix6x6(3, 5) =
parseDouble(node_ac->getValue(),
"ac");
1127 matrix6x6(4, 4) =
parseDouble(node_bb->getValue(),
"bb");
1128 matrix6x6(4, 5) =
parseDouble(node_bc->getValue(),
"bc");
1129 matrix6x6(5, 5) =
parseDouble(node_cc->getValue(),
"cc");
1131 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1138 std::map<Alignable *, bool> &aliset,
1139 std::map<Alignable *, Alignable *> &alitoideal)
const {
1140 DOMAttr *node_x = node->getAttributeNode(
str_x);
1141 DOMAttr *node_y = node->getAttributeNode(
str_y);
1142 DOMAttr *node_z = node->getAttributeNode(
str_z);
1143 if (node_x ==
nullptr)
1144 throw cms::Exception(
"XMLException") <<
"<moveglobal> is missing required \"x\" attribute" << std::endl;
1145 if (node_y ==
nullptr)
1146 throw cms::Exception(
"XMLException") <<
"<moveglobal> is missing required \"y\" attribute" << std::endl;
1147 if (node_z ==
nullptr)
1148 throw cms::Exception(
"XMLException") <<
"<moveglobal> is missing required \"z\" attribute" << std::endl;
1155 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1164 if (survey !=
nullptr) {
1165 matrix6x6 = survey->
errors();
1172 std::map<Alignable *, bool> &aliset,
1173 std::map<Alignable *, Alignable *> &alitoideal)
const {
1174 DOMAttr *node_x = node->getAttributeNode(
str_x);
1175 DOMAttr *node_y = node->getAttributeNode(
str_y);
1176 DOMAttr *node_z = node->getAttributeNode(
str_z);
1177 if (node_x ==
nullptr)
1178 throw cms::Exception(
"XMLException") <<
"<movelocal> is missing required \"x\" attribute" << std::endl;
1179 if (node_y ==
nullptr)
1180 throw cms::Exception(
"XMLException") <<
"<movelocal> is missing required \"y\" attribute" << std::endl;
1181 if (node_z ==
nullptr)
1182 throw cms::Exception(
"XMLException") <<
"<movelocal> is missing required \"z\" attribute" << std::endl;
1189 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1193 ali->
move(globalVector);
1199 if (survey !=
nullptr) {
1200 matrix6x6 = survey->
errors();
1207 std::map<Alignable *, bool> &aliset,
1208 std::map<Alignable *, Alignable *> &alitoideal)
const {
1209 DOMAttr *node_axisx = node->getAttributeNode(
str_axisx);
1210 DOMAttr *node_axisy = node->getAttributeNode(
str_axisy);
1211 DOMAttr *node_axisz = node->getAttributeNode(
str_axisz);
1212 DOMAttr *node_angle = node->getAttributeNode(
str_angle);
1213 if (node_axisx ==
nullptr)
1214 throw cms::Exception(
"XMLException") <<
"<rotatelocal> is missing required \"axisx\" attribute" << std::endl;
1215 if (node_axisy ==
nullptr)
1216 throw cms::Exception(
"XMLException") <<
"<rotatelocal> is missing required \"axisy\" attribute" << std::endl;
1217 if (node_axisz ==
nullptr)
1218 throw cms::Exception(
"XMLException") <<
"<rotatelocal> is missing required \"axisz\" attribute" << std::endl;
1219 if (node_angle ==
nullptr)
1220 throw cms::Exception(
"XMLException") <<
"<rotatelocal> is missing required \"angle\" attribute" << std::endl;
1228 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1237 if (survey !=
nullptr) {
1238 matrix6x6 = survey->
errors();
1245 std::map<Alignable *, bool> &aliset,
1246 std::map<Alignable *, Alignable *> &alitoideal)
const {
1247 DOMAttr *node_rphi = node->getAttributeNode(
str_rphi);
1248 DOMAttr *node_phi = node->getAttributeNode(
str_phi);
1249 if (node_rphi ==
nullptr && node_phi ==
nullptr)
1250 throw cms::Exception(
"XMLException") <<
"<rotatebeamline> is missing required \"*phi\" attribute" << std::endl;
1251 if (node_rphi !=
nullptr && node_phi !=
nullptr)
1252 throw cms::Exception(
"XMLException") <<
"<rotatebeamline> can't have both an \"rphi\" and a \"phi\" attribute" 1256 if (node_rphi !=
nullptr) {
1257 value =
parseDouble(node_rphi->getValue(),
"rphi");
1262 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1268 double phi0 = pos.
phi();
1269 double deltaphi =
value;
1270 if (node_rphi !=
nullptr)
1271 deltaphi = value /
radius;
1275 radius * (
cos(phi0 + deltaphi) -
cos(phi0)), radius * (
sin(phi0 + deltaphi) -
sin(phi0)), 0.));
1281 if (survey !=
nullptr) {
1282 matrix6x6 = survey->
errors();
1289 std::map<Alignable *, bool> &aliset,
1290 std::map<Alignable *, Alignable *> &alitoideal)
const {
1291 DOMAttr *node_x = node->getAttributeNode(
str_x);
1292 DOMAttr *node_y = node->getAttributeNode(
str_y);
1293 DOMAttr *node_z = node->getAttributeNode(
str_z);
1294 DOMAttr *node_angle = node->getAttributeNode(
str_angle);
1295 if (node_x ==
nullptr)
1296 throw cms::Exception(
"XMLException") <<
"<rotateglobalaxis> is missing required \"x\" attribute" << std::endl;
1297 if (node_y ==
nullptr)
1298 throw cms::Exception(
"XMLException") <<
"<rotateglobalaxis> is missing required \"y\" attribute" << std::endl;
1299 if (node_z ==
nullptr)
1300 throw cms::Exception(
"XMLException") <<
"<rotateglobalaxis> is missing required \"z\" attribute" << std::endl;
1301 if (node_angle ==
nullptr)
1302 throw cms::Exception(
"XMLException") <<
"<rotateglobalaxis> is missing required \"angle\" attribute" << std::endl;
1309 for (std::map<Alignable *, bool>::const_iterator aliiter = aliset.begin(); aliiter != aliset.end(); ++aliiter) {
1315 double aprime = x /
sqrt(x * x + y * y + z * z);
1316 double bprime = y /
sqrt(x * x + y * y + z * z);
1317 double cprime = z /
sqrt(x * x + y * y + z * z);
1318 double q0 =
cos(angle / 2.);
1319 double q1 =
sin(angle / 2.) * aprime;
1320 double q2 =
sin(angle / 2.) * bprime;
1321 double q3 =
sin(angle / 2.) * cprime;
1323 double pos2x = (q0 * q0 + q1 * q1 - q2 * q2 - q3 * q3) * pos.
x() + 2. * (q1 * q2 - q0 * q3) * pos.
y() +
1324 2. * (q1 * q3 + q0 *
q2) * pos.
z();
1325 double pos2y = 2. * (q2 * q1 + q0 * q3) * pos.
x() + (q0 * q0 - q1 * q1 + q2 * q2 - q3 * q3) * pos.
y() +
1326 2. * (q2 * q3 - q0 *
q1) * pos.
z();
1327 double pos2z = 2. * (q3 * q1 - q0 *
q2) * pos.
x() + 2. * (q3 * q2 + q0 *
q1) * pos.
y() +
1328 (q0 * q0 - q1 * q1 - q2 * q2 + q3 * q3) * pos.
z();
1330 double movex = pos2x - pos.
x();
1331 double movey = pos2y - pos.
y();
1332 double movez = pos2z - pos.
z();
1339 if (survey !=
nullptr) {
1340 matrix6x6 = survey->
errors();
TkRotation< Scalar > RotationType
virtual void rotateAroundLocalAxis(const LocalVector &axis, Scalar radians)
Rotation around arbitratry local axis.
Sin< T >::type sin(const T &t)
align::Alignables DTBarrel()
const SurveyDet * survey() const
Return survey info.
Geom::Phi< T > phi() const
constexpr uint32_t rawId() const
get the raw id
const RotationType & globalRotation() const
Return the global orientation of the object.
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
const align::ErrorMatrix & errors() const
const AlignableObjectId & objectIdProvider() const
Return muon alignable object ID provider derived from the muon system geometry.
virtual void rotateAroundGlobalAxis(const GlobalVector &axis, Scalar radians)
Rotation around arbitratry global axis.
virtual void rotateAroundGlobalZ(Scalar radians)
Rotation around global z-axis.
Point3DBase< Scalar, GlobalTag > PositionType
align::Alignables CSCEndcaps()
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
void rectify(RotationType &)
Correct a rotation matrix for rounding errors.
Cos< T >::type cos(const T &t)
Allows conversion between type and name, and vice-versa.
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
AlgebraicVector EulerAngles
bool equals(const edm::RefToBase< Jet > &j1, const edm::RefToBase< Jet > &j2)
const char * idToString(align::StructureType type) const
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
void setSurvey(const SurveyDet *)
Set survey info.
std::vector< Alignable * > Alignables
TkRotation transposed() const
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
const PositionType & globalPosition() const
Return the global position of the object.
alpha
zGenParticlesMatch = cms.InputTag(""),
math::Error< 6 >::type ErrorMatrix
Basic3DVector< T > multiplyInverse(const Basic3DVector< T > &v) const
Constructor of the full muon geometry.
const BasicVectorType & basicVector() const
Alignable * mother() const
Return pointer to container alignable (if any)
Power< A, B >::type pow(const A &a, const B &b)
T angle(T x1, T y1, T z1, T x2, T y2, T z2)