00001 #ifndef Alignment_MuonAlignment_MuonAlignmentInputXML_h
00002 #define Alignment_MuonAlignment_MuonAlignmentInputXML_h
00003
00004
00005
00006
00007
00016
00017
00018
00019
00020
00021
00022
00023 #include <string>
00024 #include <xercesc/dom/DOMElement.hpp>
00025
00026
00027 #include "Alignment/MuonAlignment/interface/MuonAlignmentInputMethod.h"
00028 #include "Alignment/CommonAlignment/interface/Alignable.h"
00029
00030
00031
00032 class MuonAlignmentInputXML: public MuonAlignmentInputMethod {
00033 public:
00034 MuonAlignmentInputXML(std::string fileName);
00035 virtual ~MuonAlignmentInputXML();
00036
00037
00038
00039
00040
00041
00042
00043 virtual AlignableMuon *newAlignableMuon(const edm::EventSetup &iSetup) const;
00044
00045 private:
00046 MuonAlignmentInputXML(const MuonAlignmentInputXML&);
00047
00048 const MuonAlignmentInputXML& operator=(const MuonAlignmentInputXML&);
00049
00050 void recursiveGetId(std::map<unsigned int, Alignable*> &alignableNavigator, const std::vector<Alignable*> &alignables) const;
00051
00052 void fillAliToIdeal(std::map<Alignable*, Alignable*> &alitoideal, const std::vector<Alignable*> alignables, const std::vector<Alignable*> ideals) const;
00053
00054 Alignable *getNode(std::map<unsigned int, Alignable*> &alignableNavigator, const xercesc_2_7::DOMElement *node) const;
00055 Alignable *getDTnode(align::StructureType structureType, std::map<unsigned int, Alignable*> &alignableNavigator, const xercesc_2_7::DOMElement *node) const;
00056 Alignable *getCSCnode(align::StructureType structureType, std::map<unsigned int, Alignable*> &alignableNavigator, const xercesc_2_7::DOMElement *node) const;
00057
00058 double parseDouble(const XMLCh *str, const char *attribute) const;
00059 void set_one_position(Alignable *ali, const align::PositionType &pos, const align::RotationType &rot) const;
00060
00061 void do_setposition (const xercesc_2_7::DOMElement *node, std::map<Alignable*, bool> &aliset, std::map<Alignable*, Alignable*> &alitoideal) const;
00062 void do_setape (const xercesc_2_7::DOMElement *node, std::map<Alignable*, bool> &aliset, std::map<Alignable*, Alignable*> &alitoideal) const;
00063 void do_setsurveyerr(const xercesc_2_7::DOMElement *node, std::map<Alignable*, bool> &aliset, std::map<Alignable*, Alignable*> &alitoideal) const;
00064 void do_moveglobal (const xercesc_2_7::DOMElement *node, std::map<Alignable*, bool> &aliset, std::map<Alignable*, Alignable*> &alitoideal) const;
00065 void do_rotatelocal (const xercesc_2_7::DOMElement *node, std::map<Alignable*, bool> &aliset, std::map<Alignable*, Alignable*> &alitoideal) const;
00066
00067
00068 std::string m_fileName;
00069
00070 XMLCh *str_operation;
00071 XMLCh *str_collection;
00072 XMLCh *str_name;
00073 XMLCh *str_DTBarrel;
00074 XMLCh *str_DTWheel;
00075 XMLCh *str_DTStation;
00076 XMLCh *str_DTChamber;
00077 XMLCh *str_DTSuperLayer;
00078 XMLCh *str_DTLayer;
00079 XMLCh *str_CSCEndcap;
00080 XMLCh *str_CSCStation;
00081 XMLCh *str_CSCRing;
00082 XMLCh *str_CSCChamber;
00083 XMLCh *str_CSCLayer;
00084 XMLCh *str_setposition;
00085 XMLCh *str_setape;
00086 XMLCh *str_setsurveyerr;
00087 XMLCh *str_moveglobal;
00088 XMLCh *str_rotatelocal;
00089 XMLCh *str_relativeto;
00090 XMLCh *str_rawId;
00091 XMLCh *str_wheel;
00092 XMLCh *str_station;
00093 XMLCh *str_sector;
00094 XMLCh *str_superlayer;
00095 XMLCh *str_layer;
00096 XMLCh *str_endcap;
00097 XMLCh *str_ring;
00098 XMLCh *str_chamber;
00099 XMLCh *str_axisx;
00100 XMLCh *str_axisy;
00101 XMLCh *str_axisz;
00102 XMLCh *str_angle;
00103 XMLCh *str_x;
00104 XMLCh *str_y;
00105 XMLCh *str_z;
00106 XMLCh *str_phix;
00107 XMLCh *str_phiy;
00108 XMLCh *str_phiz;
00109 XMLCh *str_alpha;
00110 XMLCh *str_beta;
00111 XMLCh *str_gamma;
00112 XMLCh *str_xx;
00113 XMLCh *str_xy;
00114 XMLCh *str_xz;
00115 XMLCh *str_xa;
00116 XMLCh *str_xb;
00117 XMLCh *str_xc;
00118 XMLCh *str_yy;
00119 XMLCh *str_yz;
00120 XMLCh *str_ya;
00121 XMLCh *str_yb;
00122 XMLCh *str_yc;
00123 XMLCh *str_zz;
00124 XMLCh *str_za;
00125 XMLCh *str_zb;
00126 XMLCh *str_zc;
00127 XMLCh *str_aa;
00128 XMLCh *str_ab;
00129 XMLCh *str_ac;
00130 XMLCh *str_bb;
00131 XMLCh *str_bc;
00132 XMLCh *str_cc;
00133 XMLCh *str_none;
00134 XMLCh *str_ideal;
00135 XMLCh *str_container;
00136 };
00137
00138
00139 #endif