CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
DTLinearDriftAlgo Class Reference

#include <DTLinearDriftAlgo.h>

Inheritance diagram for DTLinearDriftAlgo:
DTRecHitBaseAlgo

Public Member Functions

bool compute (const DTLayer *layer, const DTDigi &digi, LocalPoint &leftPoint, LocalPoint &rightPoint, LocalError &error) const override
 
bool compute (const DTLayer *layer, const DTRecHit1D &recHit1D, const float &angle, const GlobalPoint &globPos, DTRecHit1D &newHit1D) const override
 
bool compute (const DTLayer *layer, const DTRecHit1D &recHit1D, const float &angle, DTRecHit1D &newHit1D) const override
 
 DTLinearDriftAlgo (const edm::ParameterSet &config)
 Constructor. More...
 
void setES (const edm::EventSetup &setup) override
 Pass the Event Setup to the algo at each event. More...
 
 ~DTLinearDriftAlgo () override
 Destructor. More...
 
- Public Member Functions inherited from DTRecHitBaseAlgo
 DTRecHitBaseAlgo (const edm::ParameterSet &config)
 Constructor. More...
 
virtual edm::OwnVector< DTRecHit1DPairreconstruct (const DTLayer *layer, const DTLayerId &layerId, const DTDigiCollection::Range &digiRange)
 Build all hits in the range associated to the layerId, at the 1st step. More...
 
virtual ~DTRecHitBaseAlgo ()
 Destructor. More...
 

Private Member Functions

virtual bool compute (const DTLayer *layer, const DTWireId &wireId, const float digiTime, const GlobalPoint &globPos, DTRecHit1D &newHit1D, int step) const
 
virtual bool compute (const DTLayer *layer, const DTWireId &wireId, const float digiTime, const GlobalPoint &globPos, LocalPoint &leftPoint, LocalPoint &rightPoint, LocalError &error, int step) const
 

Private Attributes

const bool debug
 
const float hitResolution
 
const float maxTime
 
const float minTime
 
const float vDrift
 

Additional Inherited Members

- Protected Attributes inherited from DTRecHitBaseAlgo
std::unique_ptr< DTTTrigBaseSynctheSync
 

Detailed Description

Concrete implementation of DTRecHitBaseAlgo. Compute drift distance using constant drift velocity as defined in the "driftVelocity" parameter.

Author
G. Cerminara - INFN Torino

Definition at line 14 of file DTLinearDriftAlgo.h.

Constructor & Destructor Documentation

◆ DTLinearDriftAlgo()

DTLinearDriftAlgo::DTLinearDriftAlgo ( const edm::ParameterSet config)

Constructor.

Definition at line 18 of file DTLinearDriftAlgo.cc.

20  // Get the Drift Velocity from parameter set.
21  vDrift(config.getParameter<double>("driftVelocity")), // FIXME: Default was 0.00543 cm/ns
22  hitResolution(config.getParameter<double>("hitResolution")), // FIXME: Default is
23  // vDriftMB1W1(config.getParameter<double>("driftVelocityMB1W1")), // FIXME: Default was 0.00543 cm/ns
24  minTime(config.getParameter<double>("minTime")), // FIXME: Default was -3 ns
25  maxTime(config.getParameter<double>("maxTime")), // FIXME: Default was 415 ns
26  // Set verbose output
27  debug(config.getUntrackedParameter<bool>("debug")) {}

◆ ~DTLinearDriftAlgo()

DTLinearDriftAlgo::~DTLinearDriftAlgo ( )
override

Destructor.

Definition at line 29 of file DTLinearDriftAlgo.cc.

29 {}

Member Function Documentation

◆ compute() [1/5]

bool DTLinearDriftAlgo::compute ( const DTLayer layer,
const DTDigi digi,
LocalPoint leftPoint,
LocalPoint rightPoint,
LocalError error 
) const
overridevirtual

First step in computation of Left/Right hits from a Digi. The results are the local position (in DTLayer frame) of the Left and Right hit, and the error (which is common). Returns false on failure. The hit is assumed to be at the wire center.

Implements DTRecHitBaseAlgo.

Definition at line 34 of file DTLinearDriftAlgo.cc.

35  {
36  // Get the wireId
37  DTLayerId layerId = layer->id();
38  const DTWireId wireId(layerId, digi.wire());
39 
40  // Get Wire position
41  if (!layer->specificTopology().isWireValid(digi.wire()))
42  return false;
43  LocalPoint locWirePos(layer->specificTopology().wirePosition(digi.wire()), 0, 0);
44  const GlobalPoint globWirePos = layer->toGlobal(locWirePos);
45 
46  return compute(layer, wireId, digi.time(), globWirePos, leftPoint, rightPoint, error, 1);
47 }

References relativeConstraints::error, phase1PixelTopology::layer, DTDigi::time(), and DTDigi::wire().

Referenced by compute().

◆ compute() [2/5]

bool DTLinearDriftAlgo::compute ( const DTLayer layer,
const DTRecHit1D recHit1D,
const float &  angle,
const GlobalPoint globPos,
DTRecHit1D newHit1D 
) const
overridevirtual

Third (and final) step in hits position computation. Also the hit position along the wire is available and can be used to correct the drift time for particle TOF and propagation of signal along the wire. NOTE: Only position and error of the new hit are modified

Implements DTRecHitBaseAlgo.

Definition at line 59 of file DTLinearDriftAlgo.cc.

63  {
64  return compute(layer, recHit1D.wireId(), recHit1D.digiTime(), globPos, newHit1D, 3);
65 }

References compute(), DTRecHit1D::digiTime(), phase1PixelTopology::layer, and DTRecHit1D::wireId().

◆ compute() [3/5]

bool DTLinearDriftAlgo::compute ( const DTLayer layer,
const DTRecHit1D recHit1D,
const float &  angle,
DTRecHit1D newHit1D 
) const
overridevirtual

Second step in hit position computation. It is the same as first step since the angular information is not used NOTE: Only position and error of the new hit are modified

Implements DTRecHitBaseAlgo.

Definition at line 50 of file DTLinearDriftAlgo.cc.

53  {
54  newHit1D.setPositionAndError(recHit1D.localPosition(), recHit1D.localPositionError());
55  return true;
56 }

References DTRecHit1D::localPosition(), DTRecHit1D::localPositionError(), and DTRecHit1D::setPositionAndError().

◆ compute() [4/5]

bool DTLinearDriftAlgo::compute ( const DTLayer layer,
const DTWireId wireId,
const float  digiTime,
const GlobalPoint globPos,
DTRecHit1D newHit1D,
int  step 
) const
privatevirtual

Definition at line 130 of file DTLinearDriftAlgo.cc.

135  {
136  LocalPoint leftPoint;
137  LocalPoint rightPoint;
139 
140  if (compute(layer, wireId, digiTime, globPos, leftPoint, rightPoint, error, step)) {
141  // Set the position and the error of the rechit which is being updated
142  switch (newHit1D.lrSide()) {
143  case DTEnums::Left: {
144  // Keep the original y position of newHit1D: for step==3, it's the
145  // position along the wire. Needed for rotation alignment
146  LocalPoint leftPoint3D(leftPoint.x(), newHit1D.localPosition().y(), leftPoint.z());
147  newHit1D.setPositionAndError(leftPoint3D, error);
148  break;
149  }
150 
151  case DTEnums::Right: {
152  // as above: 3d position
153  LocalPoint rightPoint3D(rightPoint.x(), newHit1D.localPosition().y(), rightPoint.z());
154  newHit1D.setPositionAndError(rightPoint3D, error);
155  break;
156  }
157 
158  default:
159  throw cms::Exception("InvalidDTCellSide") << "[DTLinearDriftAlgo] Compute at Step " << step << ", Hit side "
160  << newHit1D.lrSide() << " is invalid!" << endl;
161  return false;
162  }
163 
164  return true;
165  } else {
166  return false;
167  }
168 }

References compute(), relativeConstraints::error, Exception, phase1PixelTopology::layer, DTEnums::Left, DTRecHit1D::localPosition(), DTRecHit1D::lrSide(), DTEnums::Right, DTRecHit1D::setPositionAndError(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

◆ compute() [5/5]

bool DTLinearDriftAlgo::compute ( const DTLayer layer,
const DTWireId wireId,
const float  digiTime,
const GlobalPoint globPos,
LocalPoint leftPoint,
LocalPoint rightPoint,
LocalError error,
int  step 
) const
privatevirtual

Definition at line 68 of file DTLinearDriftAlgo.cc.

75  {
76  // Subtract the offset to the digi time accordingly to the DTTTrigBaseSync concrete instance
77  float driftTime = digiTime - theSync->offset(layer, wireId, globPos);
78 
79  // check for out-of-time
80  if (driftTime < minTime || driftTime > maxTime) {
81  if (debug)
82  cout << "[DTLinearDriftAlgo]*** Drift time out of window for in-time hits " << driftTime << endl;
83 
84  if (step == 1) { //FIXME: protection against failure at 2nd and 3rd steps, must be checked!!!
85  // Hits are interpreted as coming from out-of-time pile-up and recHit
86  // is ignored.
87  return false;
88  }
89  }
90 
91  // Small negative times interpreted as hits close to the wire.
92  if (driftTime < 0.)
93  driftTime = 0;
94 
95  // Compute the drift distance
96  // SL 21-Dec-2006: Use specific Drift for MB1W1 (non fluxed chamber)
97  float vd = vDrift;
98  // if (wireId.wheel()==1 && wireId.station()==1) {
99  // vd=vDriftMB1W1;
100  // //cout << "Using Vd " << vd<< endl;
101  // }
102 
103  float drift = driftTime * vd;
104 
105  // Get Wire position
106  if (!layer->specificTopology().isWireValid(wireId.wire()))
107  return false;
108  LocalPoint locWirePos(layer->specificTopology().wirePosition(wireId.wire()), 0, 0);
109  //Build the two possible points and the error on the position
110  leftPoint = LocalPoint(locWirePos.x() - drift, locWirePos.y(), locWirePos.z());
111  rightPoint = LocalPoint(locWirePos.x() + drift, locWirePos.y(), locWirePos.z());
113 
114  if (debug) {
115  cout << "[DTLinearDriftAlgo] Compute drift distance, for digi at wire: " << wireId << endl
116  << " Step: " << step << endl
117  << " Digi time: " << digiTime << endl
118  << " Drift time: " << driftTime << endl
119  << " Drift distance: " << drift << endl
120  << " Hit Resolution: " << hitResolution << endl
121  << " Left point: " << leftPoint << endl
122  << " Right point: " << rightPoint << endl
123  << " Error: " << error << endl;
124  }
125 
126  return true;
127 }

References gather_cfg::cout, debug, shallow::drift(), relativeConstraints::error, hitResolution, phase1PixelTopology::layer, maxTime, DTRecHitBaseAlgo::theSync, vDrift, DTWireId::wire(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

◆ setES()

void DTLinearDriftAlgo::setES ( const edm::EventSetup setup)
overridevirtual

Pass the Event Setup to the algo at each event.

Implements DTRecHitBaseAlgo.

Definition at line 31 of file DTLinearDriftAlgo.cc.

31 { theSync->setES(setup); }

References singleTopDQM_cfi::setup, and DTRecHitBaseAlgo::theSync.

Member Data Documentation

◆ debug

const bool DTLinearDriftAlgo::debug
private

◆ hitResolution

const float DTLinearDriftAlgo::hitResolution
private

Definition at line 81 of file DTLinearDriftAlgo.h.

Referenced by compute().

◆ maxTime

const float DTLinearDriftAlgo::maxTime
private

Definition at line 87 of file DTLinearDriftAlgo.h.

Referenced by compute().

◆ minTime

const float DTLinearDriftAlgo::minTime
private

Definition at line 84 of file DTLinearDriftAlgo.h.

◆ vDrift

const float DTLinearDriftAlgo::vDrift
private

Definition at line 76 of file DTLinearDriftAlgo.h.

Referenced by compute().

DTWireId::wire
int wire() const
Return the wire number.
Definition: DTWireId.h:42
step
step
Definition: StallMonitor.cc:94
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
DTRecHit1D::lrSide
DTEnums::DTCellSide lrSide() const
The side of the cell.
Definition: DTRecHit1D.h:61
gather_cfg.cout
cout
Definition: gather_cfg.py:144
vd
std::vector< DeviationSensor2D * > vd
Definition: DeviationsFromFileSensor2D.h:21
align::LocalPoint
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
DTRecHit1D::localPositionError
LocalError localPositionError() const override
Return the 3-dimensional error on the local position.
Definition: DTRecHit1D.h:50
relativeConstraints.error
error
Definition: relativeConstraints.py:53
DTDigi::time
double time() const
Get time in ns.
Definition: DTDigi.cc:37
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
DTRecHit1D::setPositionAndError
void setPositionAndError(LocalPoint pos, LocalError err)
Set the local position and its error.
Definition: DTRecHit1D.h:70
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
config
Definition: config.py:1
DTLinearDriftAlgo::minTime
const float minTime
Definition: DTLinearDriftAlgo.h:84
DTRecHit1D::wireId
DTWireId wireId() const
Return the wireId.
Definition: DTRecHit1D.h:76
DTEnums::Left
Definition: DTEnums.h:15
shallow::drift
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition: ShallowTools.cc:36
DTDigi::wire
int wire() const
Return wire number.
Definition: DTDigi.cc:41
DTRecHitBaseAlgo::theSync
std::unique_ptr< DTTTrigBaseSync > theSync
Definition: DTRecHitBaseAlgo.h:81
DTWireId
Definition: DTWireId.h:12
Point3DBase< float, LocalTag >
DTLayerId
Definition: DTLayerId.h:12
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
DTRecHit1D::localPosition
LocalPoint localPosition() const override
Return the 3-dimensional local position.
Definition: DTRecHit1D.h:47
LocalError
Definition: LocalError.h:12
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
DTRecHitBaseAlgo::DTRecHitBaseAlgo
DTRecHitBaseAlgo(const edm::ParameterSet &config)
Constructor.
Definition: DTRecHitBaseAlgo.cc:17
DTLinearDriftAlgo::debug
const bool debug
Definition: DTLinearDriftAlgo.h:90
DTLinearDriftAlgo::hitResolution
const float hitResolution
Definition: DTLinearDriftAlgo.h:81
DTRecHit1D::digiTime
float digiTime() const
Return the time (ns) of the digi used to build the rechit.
Definition: DTRecHit1D.h:79
DTEnums::Right
Definition: DTEnums.h:15
DTLinearDriftAlgo::compute
bool compute(const DTLayer *layer, const DTDigi &digi, LocalPoint &leftPoint, LocalPoint &rightPoint, LocalError &error) const override
Definition: DTLinearDriftAlgo.cc:34
Exception
Definition: hltDiff.cc:245
DTLinearDriftAlgo::maxTime
const float maxTime
Definition: DTLinearDriftAlgo.h:87
DTLinearDriftAlgo::vDrift
const float vDrift
Definition: DTLinearDriftAlgo.h:76