File indexing completed on 2024-04-06 11:56:41
0001
0002
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 }