00001 #ifndef Alignment_CommonAlignment_AlignableComposite_H 00002 #define Alignment_CommonAlignment_AlignableComposite_H 00003 00004 #include "Alignment/CommonAlignment/interface/Alignable.h" 00005 00022 00023 class GeomDet; 00024 00025 class AlignableComposite : public Alignable 00026 { 00027 00028 public: 00032 AlignableComposite( align::ID id, 00033 StructureType aType, 00034 const RotationType& rot = RotationType() ); 00035 00037 virtual ~AlignableComposite(); 00038 00042 virtual void addComponent( Alignable* component ); 00043 00045 virtual Alignables components() const { return theComponents; } 00046 00048 virtual void recursiveComponents(Alignables &result) const; 00049 00051 virtual void move( const GlobalVector& displacement ); 00052 00054 virtual void moveComponentsLocal( const LocalVector& localDisplacement ); 00055 00057 virtual void moveComponentLocal( const int i, const LocalVector& localDisplacement ); 00058 00060 virtual void rotateInGlobalFrame( const RotationType& rotation ); 00061 00063 virtual void setAlignmentPositionError( const AlignmentPositionError& ape ); 00064 00066 virtual void addAlignmentPositionError( const AlignmentPositionError& ape ); 00067 00069 virtual void addAlignmentPositionErrorFromRotation( const RotationType& rotation ); 00070 00072 virtual void addAlignmentPositionErrorFromLocalRotation( const RotationType& rotation ); 00073 00075 virtual StructureType alignableObjectId() const { return theStructureType; } 00076 00078 virtual void dump() const; 00079 00081 virtual Alignments* alignments() const; 00082 00084 virtual AlignmentErrors* alignmentErrors() const; 00085 00086 protected: 00088 explicit AlignableComposite( const GeomDet* geomDet ); 00089 00090 void setSurface( const AlignableSurface& s) { theSurface = s; } 00091 00092 StructureType theStructureType; 00093 00094 private: 00096 AlignableComposite() : Alignable (0, RotationType()) {}; 00097 00098 Alignables theComponents; // direct daughters 00099 }; 00100 00101 #endif