00001 #ifndef Alignment_TrackerAlignment_AlignableTracker_H 00002 #define Alignment_TrackerAlignment_AlignableTracker_H 00003 00004 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" 00005 00006 #include "Alignment/CommonAlignment/interface/AlignableComposite.h" 00007 #include "Alignment/CommonAlignment/interface/AlignSetup.h" 00008 #include "Alignment/TrackerAlignment/interface/TrackerCounters.h" 00009 00010 class GeometricDet; 00011 class TrackerGeometry; 00012 00013 class AlignableTracker: public AlignableComposite 00014 { 00015 00016 public: 00017 00019 explicit AlignableTracker(const TrackerGeometry *tracker); 00020 00023 Alignables& subStructures(const std::string &subStructName) { 00024 return alignableLists_.find(subStructName); 00025 } 00026 00028 Alignables& outerHalfBarrels() { return this->subStructures("TOBHalfBarrel");} 00030 Alignables& innerHalfBarrels() { return this->subStructures("TIBHalfBarrel");} 00032 Alignables& pixelHalfBarrels() { return this->subStructures("TPBHalfBarrel");} 00034 Alignables& endCaps() { return this->subStructures("TECEndcap");} 00036 Alignables& pixelEndCaps() { return this->subStructures("TPEEndcap");} 00038 Alignables& TIDs() { return this->subStructures("TIDEndcap");} 00039 00041 Alignables barrelGeomDets() { return this->merge(this->innerBarrelGeomDets(), 00042 this->outerBarrelGeomDets());} 00044 Alignables TIBTIDGeomDets() { return this->merge(this->innerBarrelGeomDets(), 00045 this->TIDGeomDets()); 00046 } 00048 Alignables& innerBarrelGeomDets() { return this->subStructures("TIBModule");} 00050 Alignables& outerBarrelGeomDets() { return this->subStructures("TOBModule");} 00052 Alignables& pixelHalfBarrelGeomDets() { return this->subStructures("TPBModule");} 00054 Alignables& endcapGeomDets() { return this->subStructures("TECModule");} 00056 Alignables& TIDGeomDets() { return this->subStructures("TIDModule");} 00058 Alignables& pixelEndcapGeomDets() { return this->subStructures("TPEModule");} 00059 00061 Alignables barrelRods() { return this->merge(this->innerBarrelRods(), this->outerBarrelRods());} 00063 Alignables& innerBarrelRods() { return this->subStructures("TIBString");} 00065 Alignables& outerBarrelRods() { return this->subStructures("TOBRod");} 00067 Alignables& pixelHalfBarrelLadders() { return this->subStructures("TPBLadder");} 00069 Alignables& endcapPetals() { return this->subStructures("TECPetal");} 00071 Alignables& TIDRings() { return this->subStructures("TIDRing");} 00073 Alignables& pixelEndcapPetals() { return this->subStructures("TPEPanel");} 00074 00076 Alignables barrelLayers() { return this->merge(this->innerBarrelLayers(), 00077 this->outerBarrelLayers() ); 00078 } 00080 Alignables& innerBarrelLayers() { return this->subStructures("TIBLayer");} 00082 Alignables& outerBarrelLayers() { return this->subStructures("TOBLayer");} 00084 Alignables& pixelHalfBarrelLayers() { return this->subStructures("TPBLayer");} 00086 Alignables& endcapLayers() { return this->subStructures("TECDisk");} 00088 Alignables& TIDLayers() { return this->subStructures("TIDDisk");} 00090 Alignables& pixelEndcapLayers() { return this->subStructures("TPEHalfDisk");} 00091 00093 Alignments* alignments() const; 00094 00096 AlignmentErrors* alignmentErrors() const; 00097 00098 private: 00099 00101 void buildBarrel( const std::string& subDet ); // prefix for sub-detector 00102 00104 void detsToAlignables(const TrackingGeometry::DetContainer& dets, 00105 const std::string& moduleName ); 00106 00107 void buildTPB(); 00108 void buildTPE(); 00109 void buildTIB(); 00110 void buildTID(); 00111 void buildTOB(); 00112 void buildTEC(); 00113 void buildTRK(); 00114 00115 Alignables merge( const Alignables& list1, const Alignables& list2 ) const; 00116 00117 AlignSetup<Alignables> alignableLists_; //< kind of map of lists of alignables 00118 00119 TrackerCounters tkCounters_; 00120 00121 00122 }; 00123 00124 #endif //AlignableTracker_H