CMS 3D CMS Logo

MTDDetTray.cc
Go to the documentation of this file.
1 
11 
12 #include <iostream>
13 
14 using namespace std;
15 
16 MTDDetTray::MTDDetTray(vector<const GeomDet*>::const_iterator first, vector<const GeomDet*>::const_iterator last)
17  : DetRodOneR(first, last) {
18  init();
19 }
20 
21 MTDDetTray::MTDDetTray(const vector<const GeomDet*>& vdets) : DetRodOneR(vdets) { init(); }
22 
24 
26 
27 const vector<const GeometricSearchDet*>& MTDDetTray::components() const {
28  // FIXME dummy impl.
29  edm::LogError("MTDDetTray") << "temporary dummy implementation of MTDDetTray::components()!!" << endl;
30  static const vector<const GeometricSearchDet*> result;
31  return result;
32 }
33 
34 pair<bool, TrajectoryStateOnSurface> MTDDetTray::compatible(const TrajectoryStateOnSurface& ts,
35  const Propagator& prop,
36  const MeasurementEstimator& est) const {
38  if (ms.isValid())
39  return make_pair(est.estimate(ms, specificSurface()) != 0, ms);
40  else
41  return make_pair(false, ms);
42 }
43 
44 vector<GeometricSearchDet::DetWithState> MTDDetTray::compatibleDets(const TrajectoryStateOnSurface& startingState,
45  const Propagator& prop,
46  const MeasurementEstimator& est) const {
47  const std::string metname = "MTD|RecoMTD|RecoMTDDetLayers|MTDDetTray";
48 
49  LogTrace(metname) << "MTDDetTray::compatibleDets, Surface at R,phi: " << surface().position().perp() << ","
50  << surface().position().phi() << " DetRod pos.";
51  // FIXME << " TS at R,phi: " << startingState.position().perp() << ","
52  // << startingState.position().phi()
53 
54  vector<DetWithState> result;
55 
56  // Propagate and check that the result is within bounds
57  pair<bool, TrajectoryStateOnSurface> compat = compatible(startingState, prop, est);
58 
59  if (!compat.first) {
60  LogTrace(metname) << " MTDDetTray::compatibleDets: not compatible"
61  << " (should not have been selected!)";
62  return result;
63  }
64 
65  // Find the most probable destination component
66  TrajectoryStateOnSurface& tsos = compat.second;
67  GlobalPoint startPos = tsos.globalPosition();
68  int closest = theBinFinder.binIndex(startPos.z());
69  const vector<const GeomDet*> dets = basicComponents();
70  LogTrace(metname) << " MTDDetTray::compatibleDets, closest det: " << closest
71  << " pos: " << dets[closest]->surface().position() << " impact " << startPos;
72 
73  // Add this detector, if it is compatible
74  // NOTE: add performs a null propagation
75  add(closest, result, tsos, prop, est);
76 
77 #ifdef EDM_ML_DEBUG
78  int nclosest = result.size();
79  int nnextdet = 0; // just DEBUG counters
80 #endif
81 
82  // Try the neighbors on each side until no more compatible.
83  // If closest is not compatible the next cannot be either
84  if (!result.empty()) {
85  const BoundPlane& closestPlane(dets[closest]->surface());
87 
88  // detHalfLen is assumed to be the same for all detectors.
89  float detHalfLen = closestPlane.bounds().length() / 2.;
90 
91  for (unsigned int idet = closest + 1; idet < dets.size(); idet++) {
92  LocalPoint nextPos(dets[idet]->toLocal(startPos));
93  if (fabs(nextPos.y()) < detHalfLen + maxDistance.y()) {
94  LogTrace(metname) << " negativeZ: det:" << idet << " pos " << nextPos.y() << " maxDistance "
95  << maxDistance.y();
96 #ifdef EDM_ML_DEBUG
97  nnextdet++;
98 #endif
99  if (!add(idet, result, tsos, prop, est))
100  break;
101  } else {
102  break;
103  }
104  }
105 
106  for (int idet = closest - 1; idet >= 0; idet--) {
107  LocalPoint nextPos(dets[idet]->toLocal(startPos));
108  if (fabs(nextPos.y()) < detHalfLen + maxDistance.y()) {
109  LogTrace(metname) << " positiveZ: det:" << idet << " pos " << nextPos.y() << " maxDistance "
110  << maxDistance.y();
111 #ifdef EDM_ML_DEBUG
112  nnextdet++;
113 #endif
114  if (!add(idet, result, tsos, prop, est))
115  break;
116  } else {
117  break;
118  }
119  }
120  }
121 
122 #ifdef EDM_ML_DEBUG
123  LogTrace(metname) << " MTDDetTray::compatibleDets, size: " << result.size() << " on closest: " << nclosest
124  << " # checked dets: " << nnextdet + 1;
125 #endif
126  if (result.empty()) {
127  LogTrace(metname) << " ***Rod not compatible---should have been discarded before!!!";
128  }
129  return result;
130 }
131 
132 vector<DetGroup> MTDDetTray::groupedCompatibleDets(const TrajectoryStateOnSurface& startingState,
133  const Propagator& prop,
134  const MeasurementEstimator& est) const {
135  // FIXME should return only 1 group
136  cout << "dummy implementation of MTDDetTray::groupedCompatibleDets()" << endl;
137  vector<DetGroup> result;
138  return result;
139 }
Propagator.h
MeasurementEstimator
Definition: MeasurementEstimator.h:19
MessageLogger.h
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
gather_cfg.cout
cout
Definition: gather_cfg.py:144
MTDDetTray::theBinFinder
BinFinderType theBinFinder
Definition: MTDDetTray.h:46
particleFlowClusterHGC_cfi.maxDistance
maxDistance
Definition: particleFlowClusterHGC_cfi.py:23
dqmdumpme.first
first
Definition: dqmdumpme.py:55
MTDDetTray::compatible
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &ts, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetTray.cc:34
end
#define end
Definition: vmac.h:39
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
MeasurementEstimator::estimate
virtual HitReturnType estimate(const TrajectoryStateOnSurface &ts, const TrackingRecHit &hit) const =0
Propagator
Definition: Propagator.h:44
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
dqmdumpme.last
last
Definition: dqmdumpme.py:56
MTDDetTray::components
const std::vector< const GeometricSearchDet * > & components() const override
Returns basic components, if any.
Definition: MTDDetTray.cc:27
MeasurementEstimator.h
Vector2DBase
Definition: Vector2DBase.h:8
Point3DBase< float, GlobalTag >
GenericBinFinderInZ::binIndex
int binIndex(T z) const override
returns an index in the valid range for the bin closest to Z
Definition: GenericBinFinderInZ.h:35
MTDDetTray::BinFinderType
GenericBinFinderInZ< float, GeomDet > BinFinderType
Definition: MTDDetTray.h:45
MTDDetTray::MTDDetTray
MTDDetTray(std::vector< const GeomDet * >::const_iterator first, std::vector< const GeomDet * >::const_iterator last)
Construct from iterators on GeomDet*.
Definition: MTDDetTray.cc:16
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DetRod::specificSurface
virtual const Plane & specificSurface() const final
Return the rod surface as a Plane.
Definition: DetRod.h:24
edm::LogError
Definition: MessageLogger.h:183
MTDDetTray::~MTDDetTray
~MTDDetTray() override
Destructor.
Definition: MTDDetTray.cc:25
DetRod::surface
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
Definition: DetRod.h:19
MTDDetTray::groupedCompatibleDets
std::vector< DetGroup > groupedCompatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetTray.cc:132
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
DetRodOneR::add
bool add(int idet, std::vector< DetWithState > &result, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
Query detector idet for compatible and add the output to result.
Definition: DetRodOneR.cc:32
Propagator::propagate
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
DetRodOneR
Definition: DetRodOneR.h:14
GloballyPositioned::position
const PositionType & position() const
Definition: GloballyPositioned.h:36
MTDDetTray::init
void init()
Definition: MTDDetTray.cc:23
GeomDet.h
DetRodOneR::basicComponents
const std::vector< const GeomDet * > & basicComponents() const override
Definition: DetRodOneR.h:26
std
Definition: JetResolutionObject.h:76
MTDDetTray.h
BoundPlane
MTDDetTray::compatibleDets
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetTray.cc:44
toLocal
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
Definition: ConversionProducer.h:192
mps_fire.result
result
Definition: mps_fire.py:303
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
begin
#define begin
Definition: vmac.h:32
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
MeasurementEstimator::maximalLocalDisplacement
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const Plane &plane) const =0
metname
const std::string metname
Definition: MuonSeedOrcaPatternRecognition.cc:43