#include <DTRecHitSegmentResidual.h>
Public Member Functions | |
float | compute (const DTGeometry *, const DTRecHit1D &, const DTRecSegment4D &) |
DTRecHitSegmentResidual () | |
~DTRecHitSegmentResidual () |
Definition at line 14 of file DTRecHitSegmentResidual.h.
DTRecHitSegmentResidual::DTRecHitSegmentResidual | ( | ) | [inline] |
Definition at line 16 of file DTRecHitSegmentResidual.h.
{}
DTRecHitSegmentResidual::~DTRecHitSegmentResidual | ( | ) | [inline] |
Definition at line 17 of file DTRecHitSegmentResidual.h.
{}
float DTRecHitSegmentResidual::compute | ( | const DTGeometry * | dtGeom, |
const DTRecHit1D & | recHit1D, | ||
const DTRecSegment4D & | segment | ||
) |
Definition at line 19 of file DTRecHitSegmentResidual.cc.
References DTGeometry::chamber(), DTSuperLayerId::chamberId(), funct::cos(), DTGeometry::layer(), DTWireId::layerId(), DTRecSegment4D::localDirection(), DTRecSegment4D::localPosition(), DTRecHit1D::localPosition(), DTLayer::specificTopology(), DTSuperLayerId::superlayer(), PV3DBase< T, PVType, FrameType >::theta(), GeomDet::toGlobal(), GeomDet::toLocal(), DTWireId::wire(), DTRecHit1D::wireId(), DTTopology::wirePosition(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by DTResidualCalibration::analyze().
{ const DTWireId wireId = recHit1D.wireId(); // Get the layer and the wire position const DTLayer* layer = dtGeom->layer(wireId); float wireX = layer->specificTopology().wirePosition(wireId.wire()); // Extrapolate the segment to the z of the wire // Get wire position in chamber RF // (y and z must be those of the hit to be coherent in the transf. of RF in case of rotations of the layer alignment) LocalPoint wirePosInLay(wireX,recHit1D.localPosition().y(),recHit1D.localPosition().z()); GlobalPoint wirePosGlob = layer->toGlobal(wirePosInLay); const DTChamber* chamber = dtGeom->chamber(wireId.layerId().chamberId()); LocalPoint wirePosInChamber = chamber->toLocal(wirePosGlob); // Segment position at Wire z in chamber local frame LocalPoint segPosAtZWire = segment.localPosition() + segment.localDirection()*wirePosInChamber.z()/cos(segment.localDirection().theta()); // Compute the distance of the segment from the wire int sl = wireId.superlayer(); float segmDistance = -1; if(sl == 1 || sl == 3) segmDistance = fabs(wirePosInChamber.x() - segPosAtZWire.x()); else if(sl == 2) segmDistance = fabs(segPosAtZWire.y() - wirePosInChamber.y()); // Compute the distance of the recHit from the wire float recHitWireDist = fabs( recHit1D.localPosition().x() - wireX ); // Compute the residuals float residualOnDistance = recHitWireDist - segmDistance; return residualOnDistance; }