00001 #ifndef Alignment_MuonAlignment_AlignableMuon_H 00002 #define Alignment_MuonAlignment_AlignableMuon_H 00003 00013 #include <vector> 00014 00015 00016 #include "Geometry/DTGeometry/interface/DTGeometry.h" 00017 #include <DataFormats/GeometryVector/interface/GlobalPoint.h> 00018 #include <Geometry/CSCGeometry/interface/CSCLayer.h> 00019 00020 #include "Alignment/CommonAlignment/interface/AlignableComposite.h" 00021 00022 class CSCGeometry; 00023 00024 // Classes that will be used to construct the muon 00025 class AlignableDTBarrel; 00026 class AlignableDTWheel; 00027 class AlignableDTStation; 00028 class AlignableDTChamber; 00029 class AlignableCSCEndcap; 00030 class AlignableCSCStation; 00031 class AlignableCSCRing; 00032 class AlignableCSCChamber; 00033 00034 00035 00036 00038 00039 class AlignableMuon: public AlignableComposite 00040 { 00041 00042 public: 00043 00045 AlignableMuon( const DTGeometry* , const CSCGeometry* ); 00046 00048 ~AlignableMuon(); 00049 00050 00052 virtual std::vector<Alignable*> components() const { return theMuonComponents; } 00053 00055 virtual Alignable* mother() { return 0; } 00056 00057 // Methods to return specific of components 00058 std::vector<Alignable*> DTLayers(); 00059 std::vector<Alignable*> DTSuperLayers(); 00060 std::vector<Alignable*> DTChambers(); 00061 std::vector<Alignable*> DTStations(); 00062 std::vector<Alignable*> DTWheels(); 00063 std::vector<Alignable*> DTBarrel(); 00064 std::vector<Alignable*> CSCLayers(); 00065 std::vector<Alignable*> CSCChambers(); 00066 std::vector<Alignable*> CSCStations(); 00067 std::vector<Alignable*> CSCRings(); 00068 std::vector<Alignable*> CSCEndcaps(); 00069 00070 // Get DT alignments sorted by DetId 00071 Alignments* dtAlignments(); 00072 00073 // Get DT alignment errors sorted by DetId 00074 AlignmentErrors* dtAlignmentErrors(); 00075 00076 // Get CSC alignments sorted by DetId 00077 Alignments* cscAlignments(); 00078 00079 // Get CSC alignment errors sorted by DetId 00080 AlignmentErrors* cscAlignmentErrors(); 00081 00082 00083 00084 private: 00085 00086 // Get the position (centered at 0 by default) 00087 PositionType computePosition(); 00088 00089 // Get the global orientation (no rotation by default) 00090 RotationType computeOrientation(); 00091 00092 // Get the Surface 00093 AlignableSurface computeSurface(); 00094 00095 // Get alignments sorted by DetId 00096 Alignments* alignments() const; 00097 00098 // Get alignment errors sorted by DetId 00099 AlignmentErrors* alignmentErrors() const; 00100 00101 00102 00103 // Sub-structure builders 00104 00105 // Build muon barrel 00106 void buildDTBarrel( const DTGeometry* ); 00107 00108 // Build muon end caps 00109 void buildCSCEndcap( const CSCGeometry* ); 00110 00112 void recursiveSetMothers( Alignable* alignable ); 00113 00114 00115 // Containers of separate components 00116 00117 std::vector<AlignableDTChamber*> theDTChambers; 00118 std::vector<AlignableDTStation*> theDTStations; 00119 std::vector<AlignableDTWheel*> theDTWheels; 00120 std::vector<AlignableDTBarrel*> theDTBarrel; 00121 00122 std::vector<AlignableCSCChamber*> theCSCChambers; 00123 std::vector<AlignableCSCStation*> theCSCStations; 00124 std::vector<AlignableCSCRing*> theCSCRings; 00125 std::vector<AlignableCSCEndcap*> theCSCEndcaps; 00126 00127 std::vector<Alignable*> theMuonComponents; 00128 00129 }; 00130 00131 #endif //AlignableMuon_H 00132 00133 00134 00135