CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Attributes | Static Private Attributes
DTTopology Class Reference

#include <DTTopology.h>

Inheritance diagram for DTTopology:
Topology

Public Types

enum  Side {
  zMin, zMax, xMin, xMax,
  yMin, yMax, none
}
 Sides of the cell. More...
 
- Public Types inherited from Topology
typedef Point2DBase< double,
LocalTag
Local2DPoint
 
typedef Vector2D::MathVector MathVector2D
 
typedef Basic2DVector< double > Vector2D
 

Public Member Functions

float cellHeight () const
 Returns the cell height. More...
 
float cellLenght () const
 
float cellWidth () const
 Returns the cell width. More...
 
int channel (const LocalPoint &p) const
 
int channels () const
 Returns the number of wires in the layer. More...
 
 DTTopology (int firstWire, int nChannels, float semilenght)
 Constructor: number of first wire, total # of wires in the layer and their lenght. More...
 
int firstChannel () const
 Returns the wire number of the first wire. More...
 
bool isWireValid (const int wireNumber) const
 
int lastChannel () const
 Returns the wire number of the last wire. More...
 
LocalError localError (const MeasurementPoint &, const MeasurementError &) const
 
LocalPoint localPosition (const MeasurementPoint &) const
 
MeasurementError measurementError (const LocalPoint &, const LocalError &) const
 Conversion to the measurement frame. More...
 
MeasurementPoint measurementPosition (const LocalPoint &) const
 
Side onWhichBorder (float x, float y, float z) const
 
Side onWhichBorder_old (float x, float y, float z) const
 Returns the side of the cell in which resides the point (x,y,z) (old cell geometry). More...
 
float sensibleHeight () const
 Returns the height of the actual sensible volume of the cell. More...
 
float sensibleWidth () const
 Returns the width of the actual sensible volume of the cell. More...
 
float wirePosition (int wireNumber) const
 Returns the x position in the layer of a given wire number. More...
 
virtual ~DTTopology ()
 
- Public Member Functions inherited from Topology
virtual int channel (const LocalPoint &lp, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual LocalError localError (const MeasurementPoint &mp, const MeasurementError &me, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual LocalPoint localPosition (const MeasurementPoint &mp, const LocalTrackPred &) const
 conversion taking also the angle from the predicted track state More...
 
virtual MeasurementError measurementError (const LocalPoint &lp, const LocalError &le, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual MeasurementPoint measurementPosition (const LocalPoint &lp, const LocalTrackAngles &) const
 conversion taking also the angle from the track state More...
 
virtual ~Topology ()
 

Private Attributes

int theFirstChannel
 
float theLength
 
int theNChannels
 
Local2DPoint theOffSet
 

Static Private Attributes

static const float IBeamThickness = 0.13
 
static const float IBeamWingLength = 0.635
 
static const float IBeamWingThickness = 0.13
 
static const float plateThickness = 0.15
 
static const float theHeight = 1.3
 
static const float theWidth = 4.2
 

Detailed Description

Conversion between the local frame of the DT DetUnits (i.e. a layer of cells in a superlayer) and the "measurement frame". This is a rectangular frame where x runs between (FirstCellNumber-0.5) and (LastCellNumber+0.5). Note that cell numbers follow the hardware convention, so that FirstCellNumber is either 1 or 2 depending of the layer.

Note that DTs measure a time, not a position, so unlike for strip detectors, there is no guarantee that a measurement in a cell will not end up in the neighbouring cell. This must be taken into account for all cases where a * LocalPoint is used as an argument, e.g. to get back the channel number. This will be an issue if wire misalignment is introduced.

The Topology interface is extended with methods relevant for the DT detectors, e.g. wirePosition(int), etc.

Date:
2011/11/02 09:22:44
Revision:
1.8
Author
R. Bellan - INFN Torino

Definition at line 30 of file DTTopology.h.

Member Enumeration Documentation

Sides of the cell.

Enumerator
zMin 
zMax 
xMin 
xMax 
yMin 
yMax 
none 

Definition at line 90 of file DTTopology.h.

Constructor & Destructor Documentation

DTTopology::DTTopology ( int  firstWire,
int  nChannels,
float  semilenght 
)

Constructor: number of first wire, total # of wires in the layer and their lenght.

Definition at line 24 of file DTTopology.cc.

References gather_cfg::cout, theFirstChannel, theHeight, theLength, theNChannels, theOffSet, and theWidth.

24  : theFirstChannel(firstWire),
25  theNChannels(nChannels),
26  theLength(semilenght*2){
28 
29 #ifdef VERBOSE
30  cout <<"Constructing DTTopology with:"<<endl
31  <<"number of wires = "<<theNChannels
32  <<", first wire number = "<<theFirstChannel<<endl
33  <<", width = "<<theWidth
34  <<", height = "<<theHeight
35  <<", length = "<<theLength
36  <<endl;
37 #endif
38 }
int theFirstChannel
Definition: DTTopology.h:99
int theNChannels
Definition: DTTopology.h:100
Point2DBase< double, LocalTag > Local2DPoint
Definition: Topology.h:55
Local2DPoint theOffSet
Definition: DTTopology.h:111
static const float theHeight
Definition: DTTopology.h:103
static const float theWidth
Definition: DTTopology.h:102
float theLength
Definition: DTTopology.h:104
tuple cout
Definition: gather_cfg.py:121
virtual DTTopology::~DTTopology ( )
inlinevirtual

Definition at line 36 of file DTTopology.h.

36 {}

Member Function Documentation

float DTTopology::cellHeight ( ) const
inline

Returns the cell height.

Definition at line 72 of file DTTopology.h.

References theHeight.

Referenced by FWRecoGeometryESProducer::addDTGeometry(), FWTGeoRecoGeometryESProducer::addDTGeometry(), and DTDigitizer::dumpHit().

72 {return theHeight;}
static const float theHeight
Definition: DTTopology.h:103
float DTTopology::cellLenght ( ) const
inline

Returns the cell length. This is the length of the sensitive volume, i.e. lenght of the wire minus the lenght of the two tappini (1.55 mm each)

Definition at line 75 of file DTTopology.h.

References theLength.

Referenced by FWRecoGeometryESProducer::addDTGeometry(), FWTGeoRecoGeometryESProducer::addDTGeometry(), DTDigitizer::dumpHit(), DTDigitizer::externalDelays(), DTTTrigSyncTOFCorr::offset(), DTTTrigSyncFromDB::offset(), and DTRecHitQuality::simHitDistFromFE().

75 {return theLength;}
float theLength
Definition: DTTopology.h:104
float DTTopology::cellWidth ( ) const
inline
int DTTopology::channel ( const LocalPoint p) const
virtual

Return the wire number, starting from a LocalPoint. This method is deprecated: when converting the position of a rechit, there is no guarantee that the converted value can be interpreted as the cell where the hit belongs, see note on neighbouring cells in the class header.

Implements Topology.

Definition at line 81 of file DTTopology.cc.

References theFirstChannel, theOffSet, theWidth, PV2DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::x().

Referenced by MuonSimHitProducer::produce().

82 {
83  return static_cast<int>( (lp.x()-theOffSet.x())/theWidth + theFirstChannel);
84 }
int theFirstChannel
Definition: DTTopology.h:99
Local2DPoint theOffSet
Definition: DTTopology.h:111
static const float theWidth
Definition: DTTopology.h:102
T x() const
Definition: PV2DBase.h:45
int DTTopology::channels ( ) const
inline
int DTTopology::firstChannel ( ) const
inline
bool DTTopology::isWireValid ( const int  wireNumber) const
inline

Definition at line 67 of file DTTopology.h.

References lastChannel(), and theFirstChannel.

Referenced by DTLinearDriftAlgo::compute(), DTLinearDriftFromDBAlgo::compute(), DTNoDriftAlgo::compute(), and wirePosition().

67 {return (wireNumber - (theFirstChannel - 1) <= 0 || wireNumber - lastChannel() > 0 ) ? false : true;}
int theFirstChannel
Definition: DTTopology.h:99
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:82
int DTTopology::lastChannel ( ) const
inline
LocalError DTTopology::localError ( const MeasurementPoint ,
const MeasurementError me 
) const
virtual

Conversion between measurement coordinates and local cartesian coordinates.

Implements Topology.

Definition at line 60 of file DTTopology.cc.

References theLength, theWidth, MeasurementError::uu(), and MeasurementError::vv().

61 {
62  return LocalError(me.uu()*(theWidth*theWidth), 0,
63  me.vv()*(theLength*theLength));
64 }
float vv() const
float uu() const
static const float theWidth
Definition: DTTopology.h:102
float theLength
Definition: DTTopology.h:104
LocalPoint DTTopology::localPosition ( const MeasurementPoint mp) const
virtual

Conversion between measurement coordinates and local cartesian coordinates.

Implements Topology.

Definition at line 53 of file DTTopology.cc.

References theFirstChannel, theLength, theOffSet, theWidth, PV2DBase< T, PVType, FrameType >::x(), and PV2DBase< T, PVType, FrameType >::y().

54 {
55  return LocalPoint( (mp.x() - theFirstChannel)*theWidth + theOffSet.x() ,
56  (1-mp.y())*theLength + theOffSet.y());
57 }
T y() const
Definition: PV2DBase.h:46
int theFirstChannel
Definition: DTTopology.h:99
Local2DPoint theOffSet
Definition: DTTopology.h:111
static const float theWidth
Definition: DTTopology.h:102
float theLength
Definition: DTTopology.h:104
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
T x() const
Definition: PV2DBase.h:45
MeasurementError DTTopology::measurementError ( const LocalPoint ,
const LocalError le 
) const
virtual

Conversion to the measurement frame.

Implements Topology.

Definition at line 74 of file DTTopology.cc.

References theLength, theWidth, LocalError::xx(), and LocalError::yy().

75 {
76  return MeasurementError(le.xx()/(theWidth*theWidth),0,
77  le.yy()/(theLength*theLength));
78 }
float xx() const
Definition: LocalError.h:24
float yy() const
Definition: LocalError.h:26
static const float theWidth
Definition: DTTopology.h:102
float theLength
Definition: DTTopology.h:104
MeasurementPoint DTTopology::measurementPosition ( const LocalPoint lp) const
virtual

Conversion to the measurement frame. (Caveat: when converting the position of a rechit, there is no guarantee that the converted value can be interpreted as the cell where the hit belongs, see note on neighbouring cells in the class header.

Implements Topology.

Definition at line 67 of file DTTopology.cc.

References theFirstChannel, theLength, theOffSet, theWidth, PV2DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::x(), PV2DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::y().

68 {
69  return MeasurementPoint( static_cast<int>( (lp.x()-theOffSet.x())/theWidth + theFirstChannel),
70  1 - (lp.y()-theOffSet.y())/theLength);
71 }
T y() const
Definition: PV2DBase.h:46
int theFirstChannel
Definition: DTTopology.h:99
T y() const
Definition: PV3DBase.h:63
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Local2DPoint theOffSet
Definition: DTTopology.h:111
static const float theWidth
Definition: DTTopology.h:102
float theLength
Definition: DTTopology.h:104
T x() const
Definition: PV2DBase.h:45
T x() const
Definition: PV3DBase.h:62
DTTopology::Side DTTopology::onWhichBorder ( float  x,
float  y,
float  z 
) const

Returns the side of the cell in which resides the point (x,y,z) (new cell geometry, i.e. with I-beam profiles).

Definition at line 111 of file DTTopology.cc.

References epsilon, IBeamWingLength, IBeamWingThickness, none, sensibleHeight(), sensibleWidth(), xMax, xMin, zMax, and zMin.

Referenced by DTDigitizer::computeTime(), DTDigitizer::dumpHit(), and DTHitAssociator::SimHitOK().

112 {
113 
114  // epsilon = Tolerance to determine if a hit starts/ends on the cell border.
115  // Current value comes from CMSIM, where hit position is
116  // always ~10um far from surface. For OSCAR the discrepancy is < 1um.
117  const float epsilon = 0.0015; // 15 um
118 
119  // with new geometry the cell shape is not rectangular, but is a
120  // rectangular with the I-beam "Wing" subtracted.
121  // The height of the Wing is 1.0 mm and the length is 6.35 mm: these 4
122  // volumens must be taken into account when the border is computed
123 
124  Side side = none;
125 
126  if ( fabs(z) > ( sensibleHeight()/2.-epsilon) ||
127  (fabs(x) > ( sensibleWidth()/2.-IBeamWingLength-epsilon) &&
128  fabs(z) > ( sensibleHeight()/2.-IBeamWingThickness-epsilon) ) ){ //FIXME
129 
130  if (z > 0.) side = zMax; // This is currently the INNER surface.
131  else side = zMin;
132  }
133 
134  else if ( fabs(x) > ( sensibleWidth()/2.-epsilon) ){
135  if (x > 0.) side = xMax;
136  else side = xMin;
137  } // FIXME: else if ymax, ymin...
138 
139  return side;
140 }
static const float IBeamWingLength
Definition: DTTopology.h:107
static const float IBeamWingThickness
Definition: DTTopology.h:106
float sensibleHeight() const
Returns the height of the actual sensible volume of the cell.
Definition: DTTopology.cc:47
float sensibleWidth() const
Returns the width of the actual sensible volume of the cell.
Definition: DTTopology.cc:41
float float float z
Side
Sides of the cell.
Definition: DTTopology.h:90
const double epsilon
Definition: DDAxes.h:10
DTTopology::Side DTTopology::onWhichBorder_old ( float  x,
float  y,
float  z 
) const

Returns the side of the cell in which resides the point (x,y,z) (old cell geometry).

Definition at line 145 of file DTTopology.cc.

References epsilon, none, sensibleHeight(), sensibleWidth(), xMax, xMin, zMax, and zMin.

146 {
147 
148  // epsilon = Tolerance to determine if a hit starts/ends on the cell border.
149  // Current value comes from CMSIM, where hit position is
150  // always ~10um far from surface. For OSCAR the discrepancy is < 1um.
151  const float epsilon = 0.0015; // 15 um
152 
153  Side side = none;
154 
155  if ( fabs(z) > ( sensibleHeight()/2.-epsilon)) {
156  if (z > 0.) {
157  side = zMax; // This is currently the INNER surface.
158  } else {
159  side = zMin;
160  }
161  } else if ( fabs(x) > ( sensibleWidth()/2.-epsilon)) {
162  if (x > 0.) {
163  side = xMax;
164  } else {
165  side = xMin;
166  }
167  } // FIXME: else if ymax, ymin...
168 
169  return side;
170 }
float sensibleHeight() const
Returns the height of the actual sensible volume of the cell.
Definition: DTTopology.cc:47
float sensibleWidth() const
Returns the width of the actual sensible volume of the cell.
Definition: DTTopology.cc:41
float float float z
Side
Sides of the cell.
Definition: DTTopology.h:90
const double epsilon
Definition: DDAxes.h:10
float DTTopology::sensibleHeight ( ) const

Returns the height of the actual sensible volume of the cell.

Definition at line 47 of file DTTopology.cc.

References plateThickness, and theHeight.

Referenced by onWhichBorder(), and onWhichBorder_old().

48 {
50 }
static const float plateThickness
Definition: DTTopology.h:108
static const float theHeight
Definition: DTTopology.h:103
float DTTopology::sensibleWidth ( ) const

Returns the width of the actual sensible volume of the cell.

Definition at line 41 of file DTTopology.cc.

References IBeamThickness, and theWidth.

Referenced by onWhichBorder(), and onWhichBorder_old().

42 {
43  return theWidth-IBeamThickness;
44 }
static const float theWidth
Definition: DTTopology.h:102
static const float IBeamThickness
Definition: DTTopology.h:109
float DTTopology::wirePosition ( int  wireNumber) const

Returns the x position in the layer of a given wire number.

Definition at line 88 of file DTTopology.cc.

References edm::hlt::Exception, isWireValid(), lastChannel(), theFirstChannel, theOffSet, theWidth, and PV2DBase< T, PVType, FrameType >::x().

Referenced by DTResolutionAnalysisTask::analyze(), DTSegmentUpdator::calculateT0corr(), DTRecHitSegmentResidual::compute(), DTLinearDriftAlgo::compute(), DTLinearDriftFromDBAlgo::compute(), DTNoDriftAlgo::compute(), DTCalibValidation::compute(), DTDigitizer::computeTime(), DTDigiSyncTOFCorr::digitizerOffset(), DTTrigGeom::getGeom(), DTTMax::InfoLayer::InfoLayer(), DTClusterer::initHits(), DTTrigGeom::localPosition(), DTTTrigSyncFromDB::offset(), DTTTrigSyncTOFCorr::offset(), DTLocalTriggerBaseTest::phiRange(), DTCalibValidation::recHitDistFromWire(), DTRecHitQuality::recHitDistFromWire(), GlobalRecHitsAnalyzer::recHitDistFromWire(), GlobalRecHitsProducer::recHitDistFromWire(), DTResidualCalibration::segmentToWireDistance(), DTRecHitQuality::simHitDistFromWire(), GlobalRecHitsAnalyzer::simHitDistFromWire(), GlobalRecHitsProducer::simHitDistFromWire(), DTHitAssociator::SimHitOK(), DTTrigGeom::tubePosInCh(), DTSegmentUpdator::updateHits(), and ValidateGeometry::validateDTLayerGeometry().

89 {
90  if (!isWireValid( wireNumber ))//- (theFirstChannel-1) <= 0. || wireNumber > lastChannel() )
91  throw cms::Exception("InvalidWireNumber") << "DTTopology::wirePosition:"
92  << " Requested wire number: "<< wireNumber
93  << " ,but the first wire number is "<< theFirstChannel
94  << " and the last wire number is "<< lastChannel()
95  << std::endl;
96  else
97  return (wireNumber - (theFirstChannel-1) - 0.5)*theWidth + theOffSet.x();
98 }
int theFirstChannel
Definition: DTTopology.h:99
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:82
Local2DPoint theOffSet
Definition: DTTopology.h:111
static const float theWidth
Definition: DTTopology.h:102
bool isWireValid(const int wireNumber) const
Definition: DTTopology.h:67
T x() const
Definition: PV2DBase.h:45

Member Data Documentation

const float DTTopology::IBeamThickness = 0.13
staticprivate

Definition at line 109 of file DTTopology.h.

Referenced by sensibleWidth().

const float DTTopology::IBeamWingLength = 0.635
staticprivate

Definition at line 107 of file DTTopology.h.

Referenced by onWhichBorder().

const float DTTopology::IBeamWingThickness = 0.13
staticprivate

Definition at line 106 of file DTTopology.h.

Referenced by onWhichBorder().

const float DTTopology::plateThickness = 0.15
staticprivate

Definition at line 108 of file DTTopology.h.

Referenced by sensibleHeight().

int DTTopology::theFirstChannel
private
const float DTTopology::theHeight = 1.3
staticprivate

Definition at line 103 of file DTTopology.h.

Referenced by cellHeight(), DTTopology(), and sensibleHeight().

float DTTopology::theLength
private
int DTTopology::theNChannels
private

Definition at line 100 of file DTTopology.h.

Referenced by channels(), DTTopology(), and lastChannel().

Local2DPoint DTTopology::theOffSet
private

Definition at line 111 of file DTTopology.h.

Referenced by channel(), DTTopology(), localPosition(), measurementPosition(), and wirePosition().

const float DTTopology::theWidth = 4.2
staticprivate