00001 #ifndef Alignment_MuonAlignment_AlignableCSCRing_H 00002 #define Alignment_MuonAlignment_AlignableCSCRing_H 00003 00013 #include "Alignment/CommonAlignment/interface/Alignable.h" 00014 #include "Alignment/CommonAlignment/interface/AlignableComposite.h" 00015 #include "Alignment/CommonAlignment/interface/AlignableSurface.h" 00016 00017 #include "Alignment/MuonAlignment/interface/AlignableCSCChamber.h" 00018 00019 00020 #include <vector> 00021 00022 class GeomDet; 00023 class AlignableCSCChamber; 00024 00029 00030 class AlignableCSCRing : public AlignableComposite 00031 { 00032 00033 public: 00034 00035 AlignableCSCRing( const std::vector<AlignableCSCChamber*> cscChambers ); 00036 00037 ~AlignableCSCRing(); 00038 00039 virtual std::vector<Alignable*> components() const 00040 { 00041 00042 std::vector<Alignable*> result; 00043 result.insert( result.end(), theCSCChambers.begin(), theCSCChambers.end() ); 00044 return result; 00045 00046 } 00047 00048 // gets the global position as the average over all positions of the layers 00049 PositionType computePosition() ; 00050 // get the global orientation 00051 RotationType computeOrientation() ; //see explanation for "theOrientation" 00052 // get the Surface 00053 AlignableSurface computeSurface() ; 00054 00055 AlignableCSCChamber &chamber(int i); 00056 00057 //virtual void twist(float); 00058 00060 friend std::ostream& operator << ( std::ostream&, const AlignableCSCRing& ); 00061 00063 void dump( void ) const; 00064 00065 00066 00067 private: 00068 00069 std::vector<AlignableCSCChamber*> theCSCChambers; 00070 00071 00072 }; 00073 00074 #endif 00075 00076 00077 00078