CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_2_9_HLT1_bphpatch4/src/Alignment/MuonAlignment/interface/AlignableMuon.h

Go to the documentation of this file.
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