CMS 3D CMS Logo

Public Member Functions | Friends

AlignableDTChamber Class Reference

A muon DT Chamber( an AlignableDet ) More...

#include <AlignableDTChamber.h>

Inheritance diagram for AlignableDTChamber:
AlignableDet AlignableComposite Alignable

List of all members.

Public Member Functions

 AlignableDTChamber (const GeomDet *geomDet)
 Constructor.

Friends

std::ostream & operator<< (std::ostream &, const AlignableDTChamber &)
 Printout the DetUnits in the DT chamber.

Detailed Description

A muon DT Chamber( an AlignableDet )

The alignable muon DT chamber.

Date:
2008/03/26 21:58:55
Revision:
1.13
Author:
Andre Sznajder - UERJ(Brazil)

Definition at line 25 of file AlignableDTChamber.h.


Constructor & Destructor Documentation

AlignableDTChamber::AlignableDTChamber ( const GeomDet geomDet)

Constructor.

Definition at line 11 of file AlignableDTChamber.cc.

References AlignableComposite::addComponent(), align::AlignableDTSuperLayer, GeomDet::components(), GeomDet::surface(), AlignableComposite::theStructureType, and Alignable::theSurface.

   : AlignableDet(geomDet, false)
{
   // even though we overload alignableObjectId(), it's dangerous to
   // have two different claims about the structure type
   theStructureType = align::AlignableDTChamber;

   // The unique thing about DT chambers is that they are Dets that contain Dets (superlayers)
   // The superlayer Dets contain DetUnits (layers), as usual
   const std::vector<const GeomDet*>& geomDets = geomDet->components();
   for (std::vector<const GeomDet*>::const_iterator idet = geomDets.begin();  idet != geomDets.end();  ++idet) {
      addComponent(new AlignableDTSuperLayer(*idet));
   }

   // DO NOT let the chamber position become an average of the layers
   this->theSurface = geomDet->surface();
}

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const AlignableDTChamber r 
) [friend]

Printout the DetUnits in the DT chamber.

Definition at line 30 of file AlignableDTChamber.cc.

                                                                      {
   std::vector<Alignable*> theDets = r.components();

   os << "    This DTChamber contains " << theDets.size() << " units" << std::endl ;
   os << "    position = " << r.globalPosition() << std::endl;
   os << "    (phi, r, z)= (" << r.globalPosition().phi() << "," << r.globalPosition().perp() << "," << r.globalPosition().z();
   os << "), orientation:" << std::endl<< r.globalRotation() << std::endl;
   
   os << "    total displacement and rotation: " << r.displacement() << std::endl;
   os << r.rotation() << std::endl;
 
   for (std::vector<Alignable*>::const_iterator idet = theDets.begin();  idet != theDets.end();  ++idet) {
      const align::Alignables& comp = (*idet)->components();

      for (unsigned int i = 0; i < comp.size(); ++i) {
         os << "     Det position, phi, r: " 
            << comp[i]->globalPosition() << " , "
            << comp[i]->globalPosition().phi() << " , "
            << comp[i]->globalPosition().perp() << std::endl; 
         os << "     local  position, phi, r: " 
            << r.surface().toLocal(comp[i]->globalPosition())        << " , "
            << r.surface().toLocal(comp[i]->globalPosition()).phi()  << " , "
            << r.surface().toLocal(comp[i]->globalPosition()).perp() << std::endl; 
      }
   }

   return os;
}