ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/IPHCalignment2/RecoTracker/TransientTrackingRecHit/interface/TSiStripRecHit2DLocalPos.h
Revision: 1.1
Committed: Fri Nov 25 17:05:34 2011 UTC (13 years, 5 months ago) by econte
Content type: text/plain
Branch: MAIN
CVS Tags: TBD2011, TBD_2011, HEAD
Log Message:
new IPHC alignment

File Contents

# Content
1 #ifndef RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripRecHit2DLocalPos_H
2 #define RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripRecHit2DLocalPos_H
3
4 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
5 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
6 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h"
7 #include "TrackingTools/TransientTrackingRecHit/interface/HelpertRecHit2DLocalPos.h"
8 #include "DataFormats/Common/interface/RefGetter.h"
9 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
10 #include "FWCore/MessageLogger/interface/MessageLogger.h"
11
12 class TSiStripRecHit2DLocalPos : public TransientTrackingRecHit{
13 public:
14
15 typedef SiStripRecHit2D::ClusterRef SiStripClusterRef;
16
17 typedef edm::LazyGetter<SiStripCluster>::value_ref SiStripRegionalClusterRef;
18
19 virtual ~TSiStripRecHit2DLocalPos() {}
20
21
22 virtual void getKfComponents( KfComponentsHolder & holder ) const {
23 HelpertRecHit2DLocalPos().getKfComponents(holder, theHitData, *det());
24 }
25
26 virtual AlgebraicVector parameters() const {return theHitData.parameters();}
27 virtual AlgebraicSymMatrix parametersError() const {
28 return HelpertRecHit2DLocalPos().parError( theHitData.localPositionError(), *det());
29 // return theHitData->parametersError();
30 }
31
32 virtual AlgebraicMatrix projectionMatrix() const {return theHitData.projectionMatrix();}
33 virtual int dimension() const {return theHitData.dimension();}
34
35 virtual LocalPoint localPosition() const {return theHitData.localPosition();}
36 virtual LocalError localPositionError() const {return theHitData.localPositionError();}
37
38 virtual const TrackingRecHit * hit() const {return &theHitData;};
39
40 virtual std::vector<const TrackingRecHit*> recHits() const {
41 return hit()->recHits();
42 }
43 virtual std::vector<TrackingRecHit*> recHits() {
44 return theHitData.recHits();
45 }
46
47 virtual const GeomDetUnit* detUnit() const;
48
49 virtual bool canImproveWithTrack() const {return true;}
50
51 //RC virtual TSiStripRecHit2DLocalPos* clone(const TrajectoryStateOnSurface& ts) const;
52 virtual RecHitPointer clone(const TrajectoryStateOnSurface& ts) const;
53
54 // Extension of the TransientTrackingRecHit interface
55
56 const SiStripRecHit2D* specificHit() const {return &theHitData;};
57 const StripClusterParameterEstimator* cpe() const {return theCPE;}
58
59 static RecHitPointer build( const GeomDet * geom, const SiStripRecHit2D* rh,
60 const StripClusterParameterEstimator* cpe,
61 float weight=1., float annealing=1.,
62 bool computeCoarseLocalPosition=false) {
63 return RecHitPointer( new TSiStripRecHit2DLocalPos( geom, rh, cpe, weight, annealing,computeCoarseLocalPosition));
64 }
65
66 static RecHitPointer build( const LocalPoint& pos, const LocalError& err,
67 const GeomDet* det,
68 const SiStripClusterRef clust,
69 const StripClusterParameterEstimator* cpe,
70 float weight=1., float annealing=1.) {
71 return RecHitPointer( new TSiStripRecHit2DLocalPos( pos, err, det, clust, cpe, weight, annealing));
72 }
73
74 static RecHitPointer build( const LocalPoint& pos, const LocalError& err,
75 const GeomDet* det,
76 const SiStripRegionalClusterRef clust,
77 const StripClusterParameterEstimator* cpe,
78 float weight=1., float annealing=1.) {
79 return RecHitPointer( new TSiStripRecHit2DLocalPos( pos, err, det, clust, cpe, weight, annealing));
80 }
81
82
83
84 private:
85
86 SiStripRecHit2D theHitData;
87 const StripClusterParameterEstimator* theCPE;
88
89 TSiStripRecHit2DLocalPos (const GeomDet * geom, const SiStripRecHit2D* rh,
90 const StripClusterParameterEstimator* cpe,
91 float weight, float annealing,
92 bool computeCoarseLocalPosition) :
93 TransientTrackingRecHit(geom, weight, annealing), theCPE(cpe)
94 {
95 if (rh->hasPositionAndError() || !computeCoarseLocalPosition)
96 theHitData = SiStripRecHit2D(*rh);
97 else{
98 if (computeCoarseLocalPosition && !cpe){
99 edm::LogError("TSiStripRecHit2DLocalPos")<<" trying to compute coarse local position but CPE is not provided. Not computing local position from disk for the transient tracking rechit.";
100 theHitData = SiStripRecHit2D(*rh);
101 }
102 else{
103 const GeomDetUnit* gdu = dynamic_cast<const GeomDetUnit*>(geom);
104 LogDebug("TSiStripRecHit2DLocalPos")<<"calculating coarse position/error.";
105 if (gdu){
106 if (rh->cluster().isNonnull()){
107 StripClusterParameterEstimator::LocalValues lval= theCPE->localParameters(*rh->cluster(), *gdu);
108 theHitData = SiStripRecHit2D(lval.first, lval.second, geom->geographicalId(),rh->cluster());
109 }else{
110 StripClusterParameterEstimator::LocalValues lval= theCPE->localParameters(*rh->cluster_regional(), *gdu);
111 theHitData = SiStripRecHit2D(lval.first, lval.second, geom->geographicalId(),rh->cluster_regional());
112 }
113 }else{
114 edm::LogError("TSiStripRecHit2DLocalPos")<<" geomdet does not cast into geomdet unit. cannot create strip local parameters.";
115 theHitData = SiStripRecHit2D(*rh);
116 }
117 }
118 }
119 }
120
121 /// Creates the TrackingRecHit internally, avoids redundent cloning
122 TSiStripRecHit2DLocalPos( const LocalPoint& pos, const LocalError& err,
123 const GeomDet* det,
124 const SiStripClusterRef clust,
125 const StripClusterParameterEstimator* cpe,
126 float weight, float annealing) :
127 TransientTrackingRecHit(det, weight, annealing), theHitData(pos, err, det->geographicalId(), clust),
128 theCPE(cpe){}
129
130 // TSiStripRecHit2DLocalPos( const TSiStripRecHit2DLocalPos& other ) :
131 // TransientTrackingRecHit( other.det()),
132 // theHitData( other.specificHit()->clone()),
133 // theCPE( other.cpe()) {}
134
135 TSiStripRecHit2DLocalPos( const LocalPoint& pos, const LocalError& err,
136 const GeomDet* det,
137 const SiStripRegionalClusterRef clust,
138 const StripClusterParameterEstimator* cpe,
139 float weight, float annealing) :
140 TransientTrackingRecHit(det, weight, annealing), theHitData(pos, err, det->geographicalId(), clust),
141 theCPE(cpe){}
142
143
144
145 virtual TSiStripRecHit2DLocalPos* clone() const {
146 return new TSiStripRecHit2DLocalPos(*this);
147 }
148
149 virtual ConstRecHitContainer transientHits() const;
150
151 };
152
153 #endif