Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:56:41

0001 /* AlignableGEMRing
0002  * \author Hyunyong Kim - TAMU
0003  */
0004 #include "Alignment/MuonAlignment/interface/AlignableGEMRing.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 
0007 AlignableGEMRing::AlignableGEMRing(const std::vector<AlignableGEMSuperChamber*>& GEMSuperChambers)
0008     : AlignableComposite(GEMSuperChambers[0]->id(), align::AlignableGEMRing) {
0009   theGEMSuperChambers.insert(theGEMSuperChambers.end(), GEMSuperChambers.begin(), GEMSuperChambers.end());
0010 
0011   for (const auto& chamber : GEMSuperChambers) {
0012     const auto mother = chamber->mother();
0013     this->addComponent(chamber);
0014     chamber->setMother(mother);
0015   }
0016 
0017   setSurface(computeSurface());
0018   compConstraintType_ = Alignable::CompConstraintType::POSITION_Z;
0019 }
0020 
0021 AlignableGEMSuperChamber& AlignableGEMRing::superChamber(int i) {
0022   if (i >= size())
0023     throw cms::Exception("LogicError") << "GEM Super Chamber index (" << i << ") out of range";
0024 
0025   return *theGEMSuperChambers[i];
0026 }
0027 
0028 AlignableSurface AlignableGEMRing::computeSurface() {
0029   return AlignableSurface(computePosition(), computeOrientation());
0030 }
0031 
0032 AlignableGEMRing::PositionType AlignableGEMRing::computePosition() {
0033   float zz = 0.;
0034 
0035   for (std::vector<AlignableGEMSuperChamber*>::iterator ichamber = theGEMSuperChambers.begin();
0036        ichamber != theGEMSuperChambers.end();
0037        ichamber++)
0038     zz += (*ichamber)->globalPosition().z();
0039 
0040   zz /= static_cast<float>(theGEMSuperChambers.size());
0041 
0042   return PositionType(0.0, 0.0, zz);
0043 }
0044 
0045 AlignableGEMRing::RotationType AlignableGEMRing::computeOrientation() { return RotationType(); }
0046 
0047 std::ostream& operator<<(std::ostream& os, const AlignableGEMRing& b) {
0048   os << "This GEM Ring contains " << b.theGEMSuperChambers.size() << " GEM Super chambers" << std::endl;
0049   os << "(phi, r, z) =  (" << b.globalPosition().phi() << "," << b.globalPosition().perp() << ","
0050      << b.globalPosition().z();
0051   os << "),  orientation:" << std::endl << b.globalRotation() << std::endl;
0052   return os;
0053 }
0054 
0055 void AlignableGEMRing::dump(void) const {
0056   edm::LogInfo("AlignableDump") << (*this);
0057   for (std::vector<AlignableGEMSuperChamber*>::const_iterator iChamber = theGEMSuperChambers.begin();
0058        iChamber != theGEMSuperChambers.end();
0059        iChamber++)
0060     edm::LogInfo("AlignableDump") << (**iChamber);
0061 }