CMS 3D CMS Logo

MTDDetSector.cc
Go to the documentation of this file.
1 //#define EDM_ML_DEBUG
2 
10 
11 #include <iostream>
12 #include <iomanip>
13 #include <vector>
14 
15 using namespace std;
16 
17 MTDDetSector::MTDDetSector(vector<const GeomDet*>::const_iterator first, vector<const GeomDet*>::const_iterator last)
18  : GeometricSearchDet(false), theDets(first, last) {
19  init();
20 }
21 
22 MTDDetSector::MTDDetSector(const vector<const GeomDet*>& vdets) : GeometricSearchDet(false), theDets(vdets) { init(); }
23 
25  // Add here the sector build based on a collection of GeomDets, mimic what done in ForwardDetRingOneZ
26  // using the code from tracker BladeShapeBuilderFromDet
27  // simple initial version, no sorting for the time being
29 }
30 
31 const vector<const GeometricSearchDet*>& MTDDetSector::components() const {
32  // FIXME dummy impl.
33  edm::LogError("MTDDetLayers") << "temporary dummy implementation of MTDDetSector::components()!!";
34  static const vector<const GeometricSearchDet*> result;
35  return result;
36 }
37 
38 pair<bool, TrajectoryStateOnSurface> MTDDetSector::compatible(const TrajectoryStateOnSurface& ts,
39  const Propagator& prop,
40  const MeasurementEstimator& est) const {
42 
43 #ifdef EDM_ML_DEBUG
44  LogTrace("MTDDetLayers") << "MTDDetSector::compatible, sector: \n"
45  << (*this) << "\n TS at Z,R,phi: " << std::fixed << std::setw(14) << ts.globalPosition().z()
46  << " , " << std::setw(14) << ts.globalPosition().perp() << " , " << std::setw(14)
47  << ts.globalPosition().phi();
48  if (ms.isValid()) {
49  LogTrace("MTDDetLayers") << " DEST at Z,R,phi: " << std::fixed << std::setw(14) << ms.globalPosition().z() << " , "
50  << std::setw(14) << ms.globalPosition().perp() << " , " << std::setw(14)
51  << ms.globalPosition().phi() << " local Z: " << std::setw(14) << ms.localPosition().z();
52  } else {
53  LogTrace("MTDDetLayers") << " DEST: not valid";
54  }
55 #endif
56 
57  return make_pair(ms.isValid() and est.estimate(ms, specificSurface()) != 0, ms);
58 }
59 
60 vector<GeometricSearchDet::DetWithState> MTDDetSector::compatibleDets(const TrajectoryStateOnSurface& startingState,
61  const Propagator& prop,
62  const MeasurementEstimator& est) const {
63  LogTrace("MTDDetLayers") << "MTDDetSector::compatibleDets, sector: \n"
64  << (*this) << "\n TS at Z,R,phi: " << std::fixed << std::setw(14)
65  << startingState.globalPosition().z() << " , " << std::setw(14)
66  << startingState.globalPosition().perp() << " , " << std::setw(14)
67  << startingState.globalPosition().phi();
68 
69  vector<DetWithState> result;
70 
71  // Propagate and check that the result is within bounds
72  pair<bool, TrajectoryStateOnSurface> compat = compatible(startingState, prop, est);
73  if (!compat.first) {
74  LogTrace("MTDDetLayers") << " MTDDetSector::compatibleDets: not compatible"
75  << " (should not have been selected!)";
76  return result;
77  }
78 
79  TrajectoryStateOnSurface& tsos = compat.second;
80  GlobalPoint startPos = tsos.globalPosition();
81 
82  LogTrace("MTDDetLayers") << "Starting position: " << startPos;
83 
84  // determine distance of det center from extrapolation on the surface, sort dets accordingly
85 
86  size_t idetMin = basicComponents().size();
87  double dist2Min = std::numeric_limits<double>::max();
88  std::vector<std::pair<double, size_t> > tmpDets;
89  tmpDets.reserve(basicComponents().size());
90 
91  for (size_t idet = 0; idet < basicComponents().size(); idet++) {
92  double dist2 = (startPos - theDets[idet]->position()).mag2();
93  tmpDets.emplace_back(dist2, idet);
94  if (dist2 < dist2Min) {
95  dist2Min = dist2;
96  idetMin = idet;
97  }
98  LogTrace("MTDDetLayers") << "MTDDetSector::compatibleDets " << std::fixed << std::setw(8) << idet << " "
99  << theDets[idet]->geographicalId().rawId() << " dist = " << std::setw(10)
100  << std::sqrt(dist2) << " Min idet/dist = " << std::setw(8) << idetMin << " "
101  << std::setw(10) << std::sqrt(dist2Min) << " " << theDets[idet]->position();
102  }
103 
104  // loop on an interval od ordered detIds around the minimum
105  // set a range of GeomDets around the minimum compatible with the geometry of ETL
106 
107  size_t iniPos(idetMin > detsRange ? idetMin - detsRange : static_cast<size_t>(0));
108  size_t endPos(std::min(idetMin + detsRange, basicComponents().size() - 1));
109  tmpDets.erase(tmpDets.begin() + endPos, tmpDets.end());
110  tmpDets.erase(tmpDets.begin(), tmpDets.begin() + iniPos);
111  std::sort(tmpDets.begin(), tmpDets.end());
112 
113  for (const auto& thisDet : tmpDets) {
114  if (add(thisDet.second, result, tsos, prop, est)) {
115  LogTrace("MTDDetLayers") << "MTDDetSector::compatibleDets found compatible det " << thisDet.second
116  << " detId = " << theDets[thisDet.second]->geographicalId().rawId() << " at "
117  << theDets[thisDet.second]->position() << " dist = " << std::sqrt(thisDet.first);
118  } else {
119  break;
120  }
121  }
122 #ifdef EDM_ML_DEBUG
123  if (result.empty()) {
124  LogTrace("MTDDetLayers") << "MTDDetSector::compatibleDets, closest not compatible!";
125  } else {
126  LogTrace("MTDDetLayers") << "MTDDetSector::compatibleDets, found " << result.size() << " compatible dets";
127  }
128 #endif
129 
130  return result;
131 }
132 
134  const Propagator&,
135  const MeasurementEstimator&,
136  std::vector<DetWithState>&) const {
137  edm::LogError("MTDDetLayers") << "At the moment not a real implementation";
138 }
139 
140 vector<DetGroup> MTDDetSector::groupedCompatibleDets(const TrajectoryStateOnSurface& startingState,
141  const Propagator& prop,
142  const MeasurementEstimator& est) const {
143  // FIXME should be implemented to allow returning overlapping chambers
144  // as separate groups!
145  edm::LogInfo("MTDDetLayers") << "dummy implementation of MTDDetSector::groupedCompatibleDets()";
146  vector<DetGroup> result;
147  return result;
148 }
149 
150 bool MTDDetSector::add(size_t idet,
151  vector<DetWithState>& result,
152  const TrajectoryStateOnSurface& tsos,
153  const Propagator& prop,
154  const MeasurementEstimator& est) const {
155  pair<bool, TrajectoryStateOnSurface> compat = theCompatibilityChecker.isCompatible(theDets[idet], tsos, prop, est);
156 
157  if (compat.first) {
158  result.push_back(DetWithState(theDets[idet], compat.second));
159  }
160 
161  return compat.first;
162 }
163 
164 std::ostream& operator<<(std::ostream& os, const MTDDetSector& id) {
165  os << " MTDDetSector at " << std::fixed << id.specificSurface().position() << std::endl
166  << " L/W/T : " << std::setw(14) << id.specificSurface().bounds().length() << " / " << std::setw(14)
167  << id.specificSurface().bounds().width() << " / " << std::setw(14) << id.specificSurface().bounds().thickness()
168  << std::endl
169  << " rmin : " << std::setw(14) << id.specificSurface().innerRadius() << std::endl
170  << " rmax : " << std::setw(14) << id.specificSurface().outerRadius() << std::endl
171  << " phi ref : " << std::setw(14) << id.specificSurface().position().phi() << std::endl
172  << " phi w/2 : " << std::setw(14) << id.specificSurface().phiHalfExtension() << std::endl;
173  return os;
174 }
Propagator.h
MeasurementEstimator
Definition: MeasurementEstimator.h:19
alignBH_cfg.fixed
fixed
Definition: alignBH_cfg.py:54
MessageLogger.h
funct::false
false
Definition: Factorize.h:29
GeometricSearchDet::theCompatibilityChecker
GeomDetCompatibilityChecker theCompatibilityChecker
Definition: GeometricSearchDet.h:102
min
T min(T a, T b)
Definition: MathUtil.h:58
MTDDetSector::theDets
std::vector< const GeomDet * > theDets
Definition: MTDDetSector.h:63
MTDDetSector::compatibleDets
std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetSector.cc:60
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
MTDDetSector::compatibleDetsV
void compatibleDetsV(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const override
Definition: MTDDetSector.cc:133
MTDDetSector.h
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
MTDDiskSectorBuilderFromDet
Definition: MTDDiskSectorBuilderFromDet.h:15
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
MTDDetSector::MTDDetSector
MTDDetSector(std::vector< const GeomDet * >::const_iterator first, std::vector< const GeomDet * >::const_iterator last)
Construct from iterators on GeomDet*.
Definition: MTDDetSector.cc:17
MTDDetSector::groupedCompatibleDets
std::vector< DetGroup > groupedCompatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetSector.cc:140
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
dqmdumpme.last
last
Definition: dqmdumpme.py:56
MTDDiskSectorBuilderFromDet.h
MeasurementEstimator.h
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
MTDDetSector::add
bool add(size_t idet, std::vector< DetWithState > &result, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est) const
Definition: MTDDetSector.cc:150
RectangularPlaneBounds.h
Point3DBase< float, GlobalTag >
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
GeomDetCompatibilityChecker::isCompatible
static std::pair< bool, TrajectoryStateOnSurface > isCompatible(const GeomDet *theDet, const TrajectoryStateOnSurface &ts, const Propagator &prop, const MeasurementEstimator &est)
Definition: GeomDetCompatibilityChecker.cc:58
TrajectoryStateOnSurface::localPosition
LocalPoint localPosition() const
Definition: TrajectoryStateOnSurface.h:74
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
operator<<
std::ostream & operator<<(std::ostream &os, const MTDDetSector &id)
Definition: MTDDetSector.cc:164
MTDDetSector::specificSurface
const BoundDiskSector & specificSurface() const
Definition: MTDDetSector.h:50
MTDDetSector::compatible
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &ts, const Propagator &prop, const MeasurementEstimator &est) const override
Definition: MTDDetSector.cc:38
mag2
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
Definition: Basic3DVectorLD.h:124
Propagator::propagate
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
GeometricSearchDet::DetWithState
std::pair< const GeomDet *, TrajectoryStateOnSurface > DetWithState
Definition: GeometricSearchDet.h:19
MTDDetSector::components
const std::vector< const GeometricSearchDet * > & components() const override
Returns basic components, if any.
Definition: MTDDetSector.cc:31
MTDDetSector::init
void init()
Definition: MTDDetSector.cc:24
GeomDet.h
std
Definition: JetResolutionObject.h:76
MTDDetSector::setDisk
void setDisk(BoundDiskSector *diskS)
Definition: MTDDetSector.h:53
MTDDetSector::basicComponents
const std::vector< const GeomDet * > & basicComponents() const override
Definition: MTDDetSector.h:25
mps_fire.result
result
Definition: mps_fire.py:311
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
MTDDetSector
Definition: MTDDetSector.h:11
GeometricSearchDet
Definition: GeometricSearchDet.h:17
MTDDetSector::detsRange
static constexpr size_t detsRange
Definition: MTDDetSector.h:70
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443