CMS 3D CMS Logo

TkClonerImpl.cc
Go to the documentation of this file.
2 
9 
12 
15 
20 
22 
23 #include <iostream>
24 #include <memory>
25 
26 std::unique_ptr<SiPixelRecHit> TkClonerImpl::operator()(SiPixelRecHit const& hit,
27  TrajectoryStateOnSurface const& tsos) const {
28  const SiPixelCluster& clust = *hit.cluster();
29  auto&& params = pixelCPE->getParameters(clust, *hit.detUnit(), tsos);
30  return std::unique_ptr<SiPixelRecHit>(
31  new SiPixelRecHit(std::get<0>(params), std::get<1>(params), std::get<2>(params), *hit.det(), hit.cluster()));
32 }
33 
34 std::unique_ptr<SiStripRecHit2D> TkClonerImpl::operator()(SiStripRecHit2D const& hit,
35  TrajectoryStateOnSurface const& tsos) const {
37  const SiStripCluster& clust = hit.stripCluster();
39  return std::unique_ptr<SiStripRecHit2D>{new SiStripRecHit2D(lv.first, lv.second, *hit.det(), hit.omniCluster())};
40 }
41 
42 std::unique_ptr<SiStripRecHit1D> TkClonerImpl::operator()(SiStripRecHit1D const& hit,
43  TrajectoryStateOnSurface const& tsos) const {
45  const SiStripCluster& clust = hit.stripCluster();
47  LocalError le(lv.second.xx(), 0., std::numeric_limits<float>::max()); //Correct??
48  return std::unique_ptr<SiStripRecHit1D>{new SiStripRecHit1D(lv.first, le, *hit.det(), hit.omniCluster())};
49 }
50 
51 std::unique_ptr<Phase2TrackerRecHit1D> TkClonerImpl::operator()(Phase2TrackerRecHit1D const& hit,
52  TrajectoryStateOnSurface const& tsos) const {
53  const Phase2TrackerCluster1D& clust = hit.phase2OTCluster();
54  const PixelGeomDetUnit& gdu = (const PixelGeomDetUnit&)*(hit.detUnit());
55  auto&& params = phase2TrackerCPE->localParameters(clust, gdu, tsos);
56  return std::unique_ptr<Phase2TrackerRecHit1D>{
57  new Phase2TrackerRecHit1D(params.first, params.second, *hit.det(), hit.cluster())};
58 }
59 
61  TrajectoryStateOnSurface const& tsos) const {
62  // std::cout << "cloning " << typeid(hit).name() << std::endl;
63  const SiPixelCluster& clust = *hit.cluster();
64  auto&& params = pixelCPE->getParameters(clust, *hit.detUnit(), tsos);
65  return std::make_shared<SiPixelRecHit>(
66  std::get<0>(params), std::get<1>(params), std::get<2>(params), *hit.det(), hit.cluster());
67 }
68 
70  TrajectoryStateOnSurface const& tsos) const {
71  // std::cout << "cloning " << typeid(hit).name() << std::endl;
73  const SiStripCluster& clust = hit.stripCluster();
75  return std::make_shared<SiStripRecHit2D>(lv.first, lv.second, *hit.det(), hit.omniCluster());
76 }
77 
79  TrajectoryStateOnSurface const& tsos) const {
80  // std::cout << "cloning " << typeid(hit).name() << std::endl;
82  const SiStripCluster& clust = hit.stripCluster();
84  LocalError le(lv.second.xx(), 0., std::numeric_limits<float>::max()); //Correct??
85  return std::make_shared<SiStripRecHit1D>(lv.first, le, *hit.det(), hit.omniCluster());
86 }
87 
89  TrajectoryStateOnSurface const& tsos) const {
90  const Phase2TrackerCluster1D& clust = hit.phase2OTCluster();
91  const PixelGeomDetUnit& gdu = (const PixelGeomDetUnit&)*(hit.detUnit());
92  auto&& params = phase2TrackerCPE->localParameters(clust, gdu, tsos);
93  return std::unique_ptr<Phase2TrackerRecHit1D>{
94  new Phase2TrackerRecHit1D(params.first, params.second, *hit.det(), hit.cluster())};
95 }
96 
97 namespace {
98 #undef RecoTracker_TransientTrackingRecHit_TSiStripMatchedRecHit_RefitProj
99 #undef RecoTracker_TransientTrackingRecHit_TSiStripMatchedRecHit_RefitLGL
100 #ifdef RecoTracker_TransientTrackingRecHit_TSiStripMatchedRecHit_RefitLGL
101  // Local lo Global lo Local
102  inline LocalTrajectoryParameters gluedToStereo(const TrajectoryStateOnSurface& tsos, const GluedGeomDet* gdet) {
103  const BoundPlane& stripPlane = gdet->stereoDet()->surface();
104  LocalPoint lp = stripPlane.toLocal(tsos.globalPosition());
105  LocalVector ld = stripPlane.toLocal(tsos.globalParameters().momentum());
106  return LocalTrajectoryParameters(lp, ld, tsos.charge());
107  }
108 #elif defined(RecoTracker_TransientTrackingRecHit_TSiStripMatchedRecHit_RefitProj)
109  // A la RecHitProjector
110  inline LocalTrajectoryParameters gluedToStereo(const TrajectoryStateOnSurface& tsos, const GluedGeomDet* gdet) {
111  const BoundPlane& stripPlane = gdet->stereoDet()->surface();
112  double delta = stripPlane.localZ(tsos.globalPosition());
113  LocalVector ld = stripPlane.toLocal(tsos.globalParameters().momentum());
114  LocalPoint lp = stripPlane.toLocal(tsos.globalPosition()) - ld * delta / ld.z();
115  return LocalTrajectoryParameters(lp, ld, tsos.charge());
116  }
117 #else
118  // Dummy
119  inline const LocalTrajectoryParameters& gluedToStereo(const TrajectoryStateOnSurface& tsos,
120  const GluedGeomDet* gdet) {
121  return tsos.localParameters();
122  }
123 #endif
124 } // namespace
125 
126 std::unique_ptr<SiStripMatchedRecHit2D> TkClonerImpl::operator()(SiStripMatchedRecHit2D const& hit,
127  TrajectoryStateOnSurface const& tsos) const {
128  const GeomDet* det = hit.det();
129  const GluedGeomDet* gdet = static_cast<const GluedGeomDet*>(det);
130  LocalVector tkDir = (tsos.isValid() ? tsos.localParameters().directionNotNormalized()
131  : det->surface().toLocal(det->position() - GlobalPoint(0, 0, 0)));
132 
133  const SiStripCluster& monoclust = hit.monoCluster();
134  const SiStripCluster& stereoclust = hit.stereoCluster();
135 
138  stripCPE->localParameters(stereoclust, *gdet->stereoDet(), gluedToStereo(tsos, gdet));
139 
140  SiStripRecHit2D monoHit = SiStripRecHit2D(lvMono.first, lvMono.second, *gdet->monoDet(), hit.monoClusterRef());
141  SiStripRecHit2D stereoHit =
142  SiStripRecHit2D(lvStereo.first, lvStereo.second, *gdet->stereoDet(), hit.stereoClusterRef());
143 
144  // return theMatcher->match(&monoHit,&stereoHit,gdet,tkDir,true);
145  std::unique_ptr<SiStripMatchedRecHit2D> temp = theMatcher->match(&monoHit, &stereoHit, gdet, tkDir, false);
146  if (temp.get() == nullptr) {
147  temp = std::unique_ptr<SiStripMatchedRecHit2D>(hit.clone());
148  }
149  return temp;
150 }
151 
153  TrajectoryStateOnSurface const& tsos) const {
155  return TrackingRecHit::ConstRecHitPointer((*this)(hit, tsos));
156 }
157 
159  TrajectoryStateOnSurface const& tsos) const {
160  // std::cout << "cloning " << typeid(hit).name() << std::endl;
161  return TrackingRecHit::ConstRecHitPointer((*this)(hit, tsos));
162 }
163 
164 std::unique_ptr<ProjectedSiStripRecHit2D> TkClonerImpl::operator()(ProjectedSiStripRecHit2D const& hit,
165  TrajectoryStateOnSurface const& tsos) const {
166  const SiStripCluster& clust = hit.stripCluster();
167  const GeomDetUnit* gdu = reinterpret_cast<const GeomDetUnit*>(hit.originalDet());
168  //if (!gdu) std::cout<<"no luck dude"<<std::endl;
170 
171  // project...
172  const GeomDet& det = *hit.det();
173  const BoundPlane& gluedPlane = det.surface();
174  const BoundPlane& hitPlane = gdu->surface();
175  LocalVector tkDir =
176  (tsos.isValid() ? tsos.localDirection() : det.surface().toLocal(det.position() - GlobalPoint(0, 0, 0)));
177 
178  auto delta = gluedPlane.localZ(hitPlane.position());
179  const LocalVector& ldir = tkDir;
180  LocalPoint lhitPos = gluedPlane.toLocal(hitPlane.toGlobal(lv.first));
181  LocalPoint projectedHitPos = lhitPos - ldir * delta / ldir.z();
182 
183  LocalVector hitXAxis = gluedPlane.toLocal(hitPlane.toGlobal(LocalVector(1.f, 0, 0)));
184  LocalError hitErr = lv.second;
185  if (gluedPlane.normalVector().dot(hitPlane.normalVector()) < 0) {
186  // the two planes are inverted, and the correlation element must change sign
187  hitErr = LocalError(hitErr.xx(), -hitErr.xy(), hitErr.yy());
188  }
189  LocalError rotatedError = hitErr.rotate(hitXAxis.x(), hitXAxis.y());
190  return std::unique_ptr<ProjectedSiStripRecHit2D>{
191  new ProjectedSiStripRecHit2D(projectedHitPos, rotatedError, *hit.det(), *hit.originalDet(), hit.omniCluster())};
192 }
193 
194 std::unique_ptr<ProjectedSiStripRecHit2D> TkClonerImpl::project(SiStripMatchedRecHit2D const& hit,
195  bool mono,
196  TrajectoryStateOnSurface const& tsos) const {
197  const GeomDet& det = *hit.det();
198  const GluedGeomDet& gdet = static_cast<const GluedGeomDet&>(det);
199  const GeomDetUnit* odet = mono ? gdet.monoDet() : gdet.stereoDet();
200  const BoundPlane& gluedPlane = det.surface();
201  const BoundPlane& hitPlane = odet->surface();
202 
203  LocalVector tkDir =
204  (tsos.isValid() ? tsos.localDirection() : det.surface().toLocal(det.position() - GlobalPoint(0, 0, 0)));
205 
206  const SiStripCluster& monoclust = hit.monoCluster();
207  const SiStripCluster& stereoclust = hit.stereoCluster();
208 
210  if (tsos.isValid())
211  lv = mono ? stripCPE->localParameters(monoclust, *odet, tsos)
212  : stripCPE->localParameters(stereoclust, *odet, gluedToStereo(tsos, &gdet));
213  else
214  lv = stripCPE->localParameters(mono ? monoclust : stereoclust, *odet);
215 
216  auto delta = gluedPlane.localZ(hitPlane.position());
217  const LocalVector& ldir = tkDir;
218  LocalPoint lhitPos = gluedPlane.toLocal(hitPlane.toGlobal(lv.first));
219  LocalPoint projectedHitPos = lhitPos - ldir * delta / ldir.z();
220 
221  LocalVector hitXAxis = gluedPlane.toLocal(hitPlane.toGlobal(LocalVector(1.f, 0, 0)));
222  LocalError hitErr = lv.second;
223  if (gluedPlane.normalVector().dot(hitPlane.normalVector()) < 0) {
224  // the two planes are inverted, and the correlation element must change sign
225  hitErr = LocalError(hitErr.xx(), -hitErr.xy(), hitErr.yy());
226  }
227  LocalError rotatedError = hitErr.rotate(hitXAxis.x(), hitXAxis.y());
228  return std::unique_ptr<ProjectedSiStripRecHit2D>{new ProjectedSiStripRecHit2D(
229  projectedHitPos, rotatedError, det, *odet, mono ? hit.monoClusterRef() : hit.stereoClusterRef())};
230 }
Vector3DBase< float, LocalTag >
GeomDet::position
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
TrajectoryStateOnSurface.h
TkClonerImpl::pixelCPE
const PixelClusterParameterEstimator * pixelCPE
Definition: TkClonerImpl.h:57
TkClonerImpl::makeShared
TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const &hit, TrajectoryStateOnSurface const &tsos) const override
Definition: TkClonerImpl.cc:60
GeomDet
Definition: GeomDet.h:27
Phase2TrackerCluster1D
Definition: Phase2TrackerCluster1D.h:10
LocalError::xy
float xy() const
Definition: LocalError.h:23
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
PixelClusterParameterEstimator.h
SiPixelCluster.h
TrajectoryStateOnSurface::charge
TrackCharge charge() const
Definition: TrajectoryStateOnSurface.h:68
GluedGeomDet::monoDet
const GeomDetUnit * monoDet() const
Definition: GluedGeomDet.h:19
GluedGeomDet.h
SiStripRecHit2D
Definition: SiStripRecHit2D.h:7
SiPixelCluster
Pixel cluster – collection of neighboring pixels above threshold.
Definition: SiPixelCluster.h:27
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
TkClonerImpl::project
std::unique_ptr< ProjectedSiStripRecHit2D > project(SiStripMatchedRecHit2D const &hit, bool mono, TrajectoryStateOnSurface const &tsos) const
Definition: TkClonerImpl.cc:194
ProjectedSiStripRecHit2D
Definition: ProjectedSiStripRecHit2D.h:8
SiPixelRecHit
Our base class.
Definition: SiPixelRecHit.h:23
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
LocalTrajectoryParameters
Definition: LocalTrajectoryParameters.h:25
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
LocalError::xx
float xx() const
Definition: LocalError.h:22
PixelGeomDetUnit
Definition: PixelGeomDetUnit.h:15
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Point3DBase< float, LocalTag >
SiPixelRecHit.h
TkClonerImpl::theMatcher
const SiStripRecHitMatcher * theMatcher
Definition: TkClonerImpl.h:59
GluedGeomDet
Definition: GluedGeomDet.h:7
GlobalTrajectoryParameters::momentum
GlobalVector momentum() const
Definition: GlobalTrajectoryParameters.h:65
TrajectoryStateOnSurface::localParameters
const LocalTrajectoryParameters & localParameters() const
Definition: TrajectoryStateOnSurface.h:73
Phase2TrackerRecHit1D.h
SiStripCluster.h
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
LocalError
Definition: LocalError.h:12
LocalError::rotate
LocalError rotate(float x, float y) const
Return a new LocalError, rotated by an angle defined by the direction (x,y)
Definition: LocalError.h:37
dumpMFGeometry_cfg.delta
delta
Definition: dumpMFGeometry_cfg.py:25
TkCloner::tsos
TrackingRecHit TrajectoryStateOnSurface const &const tsos
Definition: TkCloner.h:17
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
TrackingRecHit::ConstRecHitPointer
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
Definition: TrackingRecHit.h:25
ClusterParameterEstimator::localParameters
virtual LocalValues localParameters(const T &, const GeomDetUnit &) const =0
TkClonerImpl::stripCPE
const StripClusterParameterEstimator * stripCPE
Definition: TkClonerImpl.h:58
ProjectedSiStripRecHit2D.h
TkClonerImpl.h
StripClusterParameterEstimator::localParameters
virtual void localParameters(AClusters const &clusters, ALocalValues &retValues, const GeomDetUnit &gd, const LocalTrajectoryParameters &ltp) const
Definition: StripClusterParameterEstimator.h:32
SiStripRecHit1D
Definition: SiStripRecHit1D.h:8
SiStripRecHit1D.h
GluedGeomDet::stereoDet
const GeomDetUnit * stereoDet() const
Definition: GluedGeomDet.h:20
GeomDet.h
SiStripRecHitMatcher.h
SiStripMatchedRecHit2D
Definition: SiStripMatchedRecHit2D.h:8
TkClonerImpl::operator()
std::unique_ptr< SiPixelRecHit > operator()(SiPixelRecHit const &hit, TrajectoryStateOnSurface const &tsos) const override
Definition: TkClonerImpl.cc:26
GloballyPositioned::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Definition: GloballyPositioned.h:98
BoundPlane
PixelGeomDetUnit.h
TkClonerImpl::phase2TrackerCPE
const ClusterParameterEstimator< Phase2TrackerCluster1D > * phase2TrackerCPE
Definition: TkClonerImpl.h:60
PixelClusterParameterEstimator::getParameters
virtual ReturnType getParameters(const SiPixelCluster &cl, const GeomDetUnit &det) const =0
StripClusterParameterEstimator.h
StripClusterParameterEstimator::LocalValues
std::pair< LocalPoint, LocalError > LocalValues
Definition: StripClusterParameterEstimator.h:27
TrajectoryStateOnSurface::globalParameters
const GlobalTrajectoryParameters & globalParameters() const
Definition: TrajectoryStateOnSurface.h:64
SiStripMatchedRecHit2D.h
SiStripCluster
Definition: SiStripCluster.h:9
TrackingRecHit::isValid
bool isValid() const
Definition: TrackingRecHit.h:141
SiStripRecHit2D.h
LocalError::yy
float yy() const
Definition: LocalError.h:24
hit
Definition: SiStripHitEffFromCalibTree.cc:88
Phase2TrackerRecHit1D
Definition: Phase2TrackerRecHit1D.h:10
SiStripRecHitMatcher::match
std::unique_ptr< SiStripMatchedRecHit2D > match(const SiStripRecHit2D *monoRH, const SiStripRecHit2D *stereoRH, const GluedGeomDet *gluedDet, LocalVector trackdirection, bool force) const
Definition: SiStripRecHitMatcher.cc:238