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
Log Message:
new IPHC alignment

File Contents

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