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

# User Rev Content
1 econte 1.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