ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/IPHCalignment2/RecoTracker/TransientTrackingRecHit/interface/TSiStripRecHit1D.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
Error occurred while calculating annotation data.
Log Message:
new IPHC alignment

File Contents

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