1 |
#include "RecoTracker/TransientTrackingRecHit/interface/ProjectedRecHit2D.h"
|
2 |
#include "TrackingTools/TransientTrackingRecHit/interface/TrackingRecHitProjector.h"
|
3 |
#include "RecoTracker/TransientTrackingRecHit/interface/TSiStripRecHit2DLocalPos.h"
|
4 |
#include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
|
5 |
|
6 |
|
7 |
ProjectedRecHit2D::ProjectedRecHit2D( const LocalPoint& pos, const LocalError& err,
|
8 |
const GeomDet* det, const GeomDet* originalDet,
|
9 |
const TransientTrackingRecHit& originalTransientHit,
|
10 |
float weight, float annealing ) :
|
11 |
GenericTransientTrackingRecHit( det, new ProjectedSiStripRecHit2D( pos, err, det->geographicalId(),
|
12 |
static_cast<const SiStripRecHit2D*>(originalTransientHit.hit())),weight, annealing)
|
13 |
{
|
14 |
const TSiStripRecHit2DLocalPos* specificOriginalTransientHit = static_cast<const TSiStripRecHit2DLocalPos*>(&originalTransientHit);
|
15 |
theCPE = specificOriginalTransientHit->cpe();
|
16 |
theOriginalDet = originalDet;
|
17 |
}
|
18 |
|
19 |
ProjectedRecHit2D::RecHitPointer
|
20 |
ProjectedRecHit2D::clone( const TrajectoryStateOnSurface& ts) const
|
21 |
{
|
22 |
if (theCPE != 0) {
|
23 |
TrackingRecHitProjector<ProjectedRecHit2D> proj;
|
24 |
if(!originalHit().cluster().isNull()){
|
25 |
const SiStripCluster& clust = *(originalHit().cluster());
|
26 |
|
27 |
const GeomDetUnit * gdu = reinterpret_cast<const GeomDetUnit *>(theOriginalDet);
|
28 |
//if (!gdu) std::cout<<"no luck dude"<<std::endl;
|
29 |
StripClusterParameterEstimator::LocalValues lv =
|
30 |
theCPE->localParameters( clust, *gdu, ts);
|
31 |
|
32 |
RecHitPointer updatedOriginalHit =
|
33 |
TSiStripRecHit2DLocalPos::build( lv.first, lv.second, theOriginalDet,
|
34 |
originalHit().cluster(), theCPE, weight(), getAnnealingFactor());
|
35 |
|
36 |
RecHitPointer hit = proj.project( *updatedOriginalHit, *det(), ts);
|
37 |
|
38 |
return hit;
|
39 |
}else{
|
40 |
const SiStripCluster& clust = *(originalHit().cluster_regional());
|
41 |
|
42 |
const GeomDetUnit * gdu = reinterpret_cast<const GeomDetUnit *>(theOriginalDet);
|
43 |
StripClusterParameterEstimator::LocalValues lv =
|
44 |
theCPE->localParameters( clust, *gdu, ts);
|
45 |
|
46 |
RecHitPointer updatedOriginalHit =
|
47 |
TSiStripRecHit2DLocalPos::build( lv.first, lv.second, theOriginalDet,
|
48 |
originalHit().cluster_regional(), theCPE, weight(), getAnnealingFactor());
|
49 |
|
50 |
RecHitPointer hit = proj.project( *updatedOriginalHit, *det(), ts);
|
51 |
|
52 |
return hit;
|
53 |
|
54 |
}
|
55 |
}
|
56 |
/// FIXME: should report the problem somehow
|
57 |
else return clone();
|
58 |
}
|
59 |
|
60 |
TransientTrackingRecHit::ConstRecHitContainer
|
61 |
ProjectedRecHit2D::transientHits () const {
|
62 |
ConstRecHitContainer result;
|
63 |
result.push_back(TSiStripRecHit2DLocalPos::build( theOriginalDet,&originalHit(),theCPE));
|
64 |
|
65 |
return result;
|
66 |
}
|
67 |
|
68 |
ProjectedRecHit2D::ProjectedRecHit2D( const GeomDet * geom, const GeomDet* originaldet,
|
69 |
const ProjectedSiStripRecHit2D* rh,
|
70 |
const StripClusterParameterEstimator* cpe,
|
71 |
float weight, float annealing,
|
72 |
bool computeCoarseLocalPosition) :
|
73 |
GenericTransientTrackingRecHit( geom, *rh,weight, annealing), theCPE(cpe), theOriginalDet(originaldet) {
|
74 |
if (computeCoarseLocalPosition){
|
75 |
if (theCPE != 0) {
|
76 |
TrackingRecHitProjector<ProjectedRecHit2D> proj;
|
77 |
if(!originalHit().cluster().isNull()){
|
78 |
const SiStripCluster& clust = *(originalHit().cluster());
|
79 |
|
80 |
StripClusterParameterEstimator::LocalValues lv =
|
81 |
theCPE->localParameters( clust, *detUnit());
|
82 |
|
83 |
RecHitPointer updatedOriginalHit =
|
84 |
TSiStripRecHit2DLocalPos::build( lv.first, lv.second, theOriginalDet,
|
85 |
originalHit().cluster(), theCPE, weight, annealing);
|
86 |
|
87 |
RecHitPointer hit = proj.project( *updatedOriginalHit, *det());
|
88 |
trackingRecHit_ = hit->hit()->clone();
|
89 |
}else{
|
90 |
const SiStripCluster& clust = *(originalHit().cluster_regional());
|
91 |
|
92 |
StripClusterParameterEstimator::LocalValues lv =
|
93 |
theCPE->localParameters( clust, *detUnit());
|
94 |
|
95 |
RecHitPointer updatedOriginalHit =
|
96 |
TSiStripRecHit2DLocalPos::build( lv.first, lv.second, theOriginalDet,
|
97 |
originalHit().cluster_regional(), theCPE, weight, annealing);
|
98 |
|
99 |
RecHitPointer hit = proj.project( *updatedOriginalHit, *det());
|
100 |
trackingRecHit_ = hit->hit()->clone();
|
101 |
}
|
102 |
}
|
103 |
}
|
104 |
}
|