CMS 3D CMS Logo

Public Member Functions | Private Member Functions

FWDTSegmentProxyBuilder Class Reference

Inheritance diagram for FWDTSegmentProxyBuilder:
FWSimpleProxyBuilderTemplate< DTRecSegment4D > FWSimpleProxyBuilder FWProxyBuilderBase

List of all members.

Public Member Functions

 FWDTSegmentProxyBuilder (void)
 REGISTER_PROXYBUILDER_METHODS ()
virtual ~FWDTSegmentProxyBuilder (void)

Private Member Functions

void build (const DTRecSegment4D &iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *)
 FWDTSegmentProxyBuilder (const FWDTSegmentProxyBuilder &)
const FWDTSegmentProxyBuilderoperator= (const FWDTSegmentProxyBuilder &)

Detailed Description

Definition at line 25 of file FWDTSegmentProxyBuilder.cc.


Constructor & Destructor Documentation

FWDTSegmentProxyBuilder::FWDTSegmentProxyBuilder ( void  ) [inline]

Definition at line 28 of file FWDTSegmentProxyBuilder.cc.

{}
virtual FWDTSegmentProxyBuilder::~FWDTSegmentProxyBuilder ( void  ) [inline, virtual]

Definition at line 29 of file FWDTSegmentProxyBuilder.cc.

{}
FWDTSegmentProxyBuilder::FWDTSegmentProxyBuilder ( const FWDTSegmentProxyBuilder ) [private]

Member Function Documentation

void FWDTSegmentProxyBuilder::build ( const DTRecSegment4D iData,
unsigned int  iIndex,
TEveElement &  oItemHolder,
const FWViewContext  
) [private, virtual]

iIndex is the index where iData is found in the container from which it came iItemHolder is the object to which you add your own objects which inherit from TEveElement

Reimplemented from FWSimpleProxyBuilderTemplate< DTRecSegment4D >.

Definition at line 41 of file FWDTSegmentProxyBuilder.cc.

References DTRecSegment4D::chamberId(), FWGeometry::contains(), dir, fwLog, relativeConstraints::geom, FWGeometry::getEveShape(), FWEventItem::getGeom(), FWProxyBuilderBase::item(), FWViewType::kAll3DBits, FWViewType::kAllRPZBits, fwlog::kError, DTRecSegment4D::localDirection(), DTRecSegment4D::localPosition(), FWGeometry::localToGlobal(), pos, DetId::rawId(), REGISTER_FWPROXYBUILDER, FWProxyBuilderBase::setupAddElement(), csvLumiCalc::unit, Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

{
  unsigned int rawid = iData.chamberId().rawId();
  const FWGeometry *geom = item()->getGeom();

  if( ! geom->contains( rawid ))
  {
    fwLog( fwlog::kError ) << "failed to get geometry of DT chamber with detid: " 
                           << rawid << std::endl;
    return;
  }

  TEveStraightLineSet* segmentSet = new TEveStraightLineSet();
  // FIXME: This should be set elsewhere.
  segmentSet->SetLineWidth( 3 );
  setupAddElement( segmentSet, &oItemHolder );
   
  TEveGeoShape* shape = item()->getGeom()->getEveShape( rawid );
  if( shape ) 
  {
    if( TGeoBBox* box = dynamic_cast<TGeoBBox*>( shape->GetShape()))
    {
      LocalPoint pos = iData.localPosition();
      LocalVector dir = iData.localDirection();   
      LocalVector unit = dir.unit();
    
      double localPosition[3]     = {  pos.x(),  pos.y(),  pos.z() };
      double localDirectionIn[3]  = {  dir.x(),  dir.y(),  dir.z() };
      double localDirectionOut[3] = { -dir.x(), -dir.y(), -dir.z() };

      Double_t distIn = box->DistFromInside( localPosition, localDirectionIn );
      Double_t distOut = box->DistFromInside( localPosition, localDirectionOut );
      LocalVector vIn = unit * distIn;
      LocalVector vOut = -unit * distOut;
      float localSegmentInnerPoint[3] = { static_cast<float>(localPosition[0] + vIn.x()),
                                          static_cast<float>(localPosition[1] + vIn.y()),
                                          static_cast<float>(localPosition[2] + vIn.z()) 
      };
      
      float localSegmentOuterPoint[3] = { static_cast<float>(localPosition[0] + vOut.x()),
                                          static_cast<float>(localPosition[1] + vOut.y()),
                                          static_cast<float>(localPosition[2] + vOut.z()) 
      };
                                   
      float globalSegmentInnerPoint[3];
      float globalSegmentOuterPoint[3];

      geom->localToGlobal( rawid, localSegmentInnerPoint,  globalSegmentInnerPoint, localSegmentOuterPoint,  globalSegmentOuterPoint );

      segmentSet->AddLine( globalSegmentInnerPoint[0], globalSegmentInnerPoint[1], globalSegmentInnerPoint[2],
                           globalSegmentOuterPoint[0], globalSegmentOuterPoint[1], globalSegmentOuterPoint[2] );
    }
  }
}
const FWDTSegmentProxyBuilder& FWDTSegmentProxyBuilder::operator= ( const FWDTSegmentProxyBuilder ) [private]
FWDTSegmentProxyBuilder::REGISTER_PROXYBUILDER_METHODS ( )