1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#ifndef ProjectedSiStripRecHit2D_H
#define ProjectedSiStripRecHit2D_H
#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
// #include<iostream>
class ProjectedSiStripRecHit2D final : public TrackerSingleRecHit {
public:
inline static bool isMono(GeomDet const& gdet, GeomDet const& sdet) {
return (sdet.geographicalId() - gdet.geographicalId()) == 2;
}
typedef TrackerSingleRecHit Base;
ProjectedSiStripRecHit2D() : theOriginalDet(nullptr) {}
ProjectedSiStripRecHit2D(const LocalPoint& pos,
const LocalError& err,
GeomDet const& idet,
SiStripRecHit2D const& originalHit)
: TrackerSingleRecHit(pos,
err,
idet,
isMono(idet, *originalHit.det()) ? trackerHitRTTI::projMono : trackerHitRTTI::projStereo,
originalHit.omniCluster()),
theOriginalDet(originalHit.det()) {
// std::cout << getRTTI() << ' ' << originalHit.rawId() << ' ' << idet.geographicalId().rawId() << ' ' << originalId() << std::endl;
assert(originalId() == originalHit.rawId());
}
template <typename CluRef>
ProjectedSiStripRecHit2D(
const LocalPoint& pos, const LocalError& err, GeomDet const& idet, GeomDet const& originalDet, CluRef const& clus)
: TrackerSingleRecHit(
pos, err, idet, isMono(idet, originalDet) ? trackerHitRTTI::projMono : trackerHitRTTI::projStereo, clus),
theOriginalDet(&originalDet) {
assert(originalId() == originalDet.geographicalId());
}
void setDet(const GeomDet& idet) override;
bool canImproveWithTrack() const override { return true; }
ProjectedSiStripRecHit2D* clone() const override { return new ProjectedSiStripRecHit2D(*this); }
int dimension() const override { return 2; }
void getKfComponents(KfComponentsHolder& holder) const override { getKfComponents2D(holder); }
typedef OmniClusterRef::ClusterStripRef ClusterRef;
ClusterRef cluster() const { return cluster_strip(); }
const GeomDetUnit* originalDet() const { return theOriginalDet; }
unsigned int originalId() const { return trackerHitRTTI::projId(*this); }
// not useful only for backward compatibility
SiStripRecHit2D originalHit() const { return SiStripRecHit2D(originalId(), omniClusterRef()); }
std::vector<const TrackingRecHit*> recHits() const override {
std::vector<const TrackingRecHit*> rechits;
return rechits;
}
std::vector<TrackingRecHit*> recHits() override {
std::vector<TrackingRecHit*> rechits;
return rechits;
}
private:
// double dispatch
ProjectedSiStripRecHit2D* clone_(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const override {
return cloner(*this, tsos).release();
}
#ifndef __GCCXML__
ConstRecHitPointer cloneSH_(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const override {
return cloner.makeShared(*this, tsos);
}
#endif
private:
const GeomDet* theOriginalDet;
};
#endif
|