Go to the documentation of this file.00001
00009 #include "Alignment/MuonAlignment/interface/AlignableDTBarrel.h"
00010 #include "CondFormats/Alignment/interface/Alignments.h"
00011 #include "CondFormats/Alignment/interface/AlignmentErrors.h"
00012 #include "CondFormats/Alignment/interface/AlignmentSorter.h"
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014
00015
00017 AlignableDTBarrel::AlignableDTBarrel( const std::vector<AlignableDTWheel*> dtWheels )
00018 : AlignableComposite(dtWheels[0]->id(), align::AlignableDTBarrel)
00019 {
00020
00021 theDTWheels.insert( theDTWheels.end(), dtWheels.begin(), dtWheels.end() );
00022
00023 setSurface( computeSurface() );
00024
00025 }
00026
00027
00029 AlignableDTBarrel::~AlignableDTBarrel()
00030 {
00031 for ( std::vector<AlignableDTWheel*>::iterator iter = theDTWheels.begin();
00032 iter != theDTWheels.end(); iter++)
00033 delete *iter;
00034
00035 }
00036
00038 AlignableDTWheel &AlignableDTBarrel::wheel(int i)
00039 {
00040
00041 if (i >= size() )
00042 throw cms::Exception("LogicError") << "Wheel index (" << i << ") out of range";
00043
00044 return *theDTWheels[i];
00045
00046 }
00047
00048
00051 AlignableSurface AlignableDTBarrel::computeSurface()
00052 {
00053
00054 return AlignableSurface( computePosition(), computeOrientation() );
00055
00056 }
00057
00058
00059
00061 AlignableDTBarrel::PositionType AlignableDTBarrel::computePosition()
00062 {
00063
00064 float zz = 0.;
00065
00066 for ( std::vector<AlignableDTWheel*>::iterator ilayer = theDTWheels.begin();
00067 ilayer != theDTWheels.end(); ilayer++ )
00068 zz += (*ilayer)->globalPosition().z();
00069
00070 zz /= static_cast<float>(theDTWheels.size());
00071
00072 return PositionType( 0.0, 0.0, zz );
00073
00074 }
00075
00076
00078 AlignableDTBarrel::RotationType AlignableDTBarrel::computeOrientation()
00079 {
00080 return RotationType();
00081 }
00082
00083
00084
00086 std::ostream &operator << (std::ostream& os, const AlignableDTBarrel& b )
00087 {
00088
00089 os << "This DTBarrel contains " << b.theDTWheels.size() << " Barrel wheels" << std::endl;
00090 os << "(phi, r, z) = (" << b.globalPosition().phi() << ","
00091 << b.globalPosition().perp() << "," << b.globalPosition().z();
00092 os << "), orientation:" << std::endl<< b.globalRotation() << std::endl;
00093 return os;
00094
00095 }
00096
00097
00099 void AlignableDTBarrel::dump( void ) const
00100 {
00101
00102 edm::LogInfo("AlignableDump") << (*this);
00103 for ( std::vector<AlignableDTWheel*>::const_iterator iWheel = theDTWheels.begin();
00104 iWheel != theDTWheels.end(); iWheel++ )
00105 (*iWheel)->dump();
00106
00107 }
00108
00109
00110 Alignments* AlignableDTBarrel::alignments( void ) const
00111 {
00112
00113 std::vector<Alignable*> comp = this->components();
00114 Alignments* m_alignments = new Alignments();
00115
00116 for ( std::vector<Alignable*>::iterator i=comp.begin(); i!=comp.end(); i++ )
00117 {
00118 Alignments* tmpAlignments = (*i)->alignments();
00119 std::copy( tmpAlignments->m_align.begin(), tmpAlignments->m_align.end(),
00120 std::back_inserter(m_alignments->m_align) );
00121 delete tmpAlignments;
00122 }
00123
00124 std::sort( m_alignments->m_align.begin(), m_alignments->m_align.end(),
00125 lessAlignmentDetId<AlignTransform>() );
00126
00127 return m_alignments;
00128
00129 }
00130
00131
00132 AlignmentErrors* AlignableDTBarrel::alignmentErrors( void ) const
00133 {
00134
00135 std::vector<Alignable*> comp = this->components();
00136 AlignmentErrors* m_alignmentErrors = new AlignmentErrors();
00137
00138
00139 for ( std::vector<Alignable*>::iterator i=comp.begin(); i!=comp.end(); i++ )
00140 {
00141 AlignmentErrors* tmpAlignmentErrors = (*i)->alignmentErrors();
00142 std::copy( tmpAlignmentErrors->m_alignError.begin(), tmpAlignmentErrors->m_alignError.end(),
00143 std::back_inserter(m_alignmentErrors->m_alignError) );
00144 delete tmpAlignmentErrors;
00145 }
00146
00147 std::sort( m_alignmentErrors->m_alignError.begin(), m_alignmentErrors->m_alignError.end(),
00148 lessAlignmentDetId<AlignTransformError>() );
00149
00150 return m_alignmentErrors;
00151
00152 }
00153
00154