CMS 3D CMS Logo

ElectronSiStripSeedGenerator.h

Go to the documentation of this file.
00001 #ifndef ElectronSiStripSeedGenerator_H
00002 #define ElectronSiStripSeedGenerator_H
00003 
00013 #include "FWCore/Framework/interface/Frameworkfwd.h"
00014 #include "FWCore/ParameterSet/interface/InputTag.h"
00015 #include "FWCore/Framework/interface/ESHandle.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 #include "FWCore/Framework/interface/Event.h"
00018 #include "FWCore/Framework/interface/ValidityInterval.h"
00019 
00020 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
00021 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
00022 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
00023 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
00024 
00025 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00026 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00027 #include "Geometry/CommonDetUnit/interface/GeomDetEnumerators.h"
00028 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00029 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00030 
00031 #include "DataFormats/DetId/interface/DetId.h"
00032 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00033 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00034 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00035 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00036 
00037 #include "DataFormats/L1Trigger/interface/L1EmParticleFwd.h"
00038 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00039 #include "DataFormats/EgammaReco/interface/ElectronPixelSeedFwd.h"  
00040 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00041 
00042 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00043 #include "TrackingTools/PatternTools/interface/TrajectoryStateUpdator.h"
00044 #include "TrackingTools/KalmanUpdators/interface/KFUpdator.h"
00045 
00046 #include "RecoLocalTracker/SiStripRecHitConverter/interface/SiStripRecHitMatcher.h"
00047 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00048 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00049 
00050 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
00051 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00052 #include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimatorBase.h"
00053 #include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimator.h"
00054 
00055 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
00056 
00057 class PropagatorWithMaterial;
00058 class KFUpdator;
00059 class MeasurementTracker;
00060 class NavigationSchool;
00061 
00062 class ElectronSiStripSeedGenerator
00063 {
00064 public:
00065 
00066   //RC
00067   typedef edm::OwnVector<TrackingRecHit> PRecHitContainer;
00068   typedef TransientTrackingRecHit::ConstRecHitPointer  ConstRecHitPointer;
00069   typedef TransientTrackingRecHit::RecHitPointer       RecHitPointer;
00070   typedef TransientTrackingRecHit::RecHitContainer     RecHitContainer;
00071   
00072 
00073   enum mode{HLT, offline, unknown};  //to be used later
00074 
00075   ElectronSiStripSeedGenerator( );
00076 
00077   ~ElectronSiStripSeedGenerator();
00078 
00079   void setupES(const edm::EventSetup& setup, const edm::ParameterSet& conf);
00080   void run(edm::Event&, const edm::Handle<reco::SuperClusterCollection>&,
00081            reco::ElectronPixelSeedCollection&); 
00082 
00083  private:
00084         double normalPhi(double phi) const {
00085                 while (phi > 2.* M_PI) { phi -= 2.*M_PI; }
00086                 while (phi < 0) { phi += 2.*M_PI; }
00087                 return phi;
00088         }
00089         
00090         double phiDiff(double phi1, double phi2){
00091                 double result = normalPhi(phi1) - normalPhi(phi2);
00092                 if(result > M_PI) result -= 2*M_PI;
00093                 if(result < -M_PI) result += 2*M_PI;
00094                 return result;
00095         }
00096 
00097         double unwrapPhi(double phi) const {
00098           while (phi > M_PI) { phi -= 2.*M_PI; }
00099           while (phi < -M_PI) { phi += 2.*M_PI; }
00100           return phi;
00101         }
00102         
00103         void findSeedsFromCluster(edm::Ref<reco::SuperClusterCollection>,
00104                                   reco::ElectronPixelSeedCollection&);
00105         
00106         int whichSubdetector(std::vector<const SiStripMatchedRecHit2D*>::const_iterator hit);
00107 
00108         bool preselection(GlobalPoint position,GlobalPoint superCluster,double phiVsRSlope);
00109         
00110         bool checkHitsAndTSOS(std::vector<const SiStripMatchedRecHit2D*>::const_iterator hit1,
00111                               std::vector<const SiStripMatchedRecHit2D*>::const_iterator hit2,
00112                               double scr,double scz,double pT,double scEta);
00113 
00114         const SiStripMatchedRecHit2D* matchedHitConverter(ConstRecHitPointer crhp);
00115 
00116         std::vector<bool> useDetLayer(double scEta);
00117         
00118         edm::ESHandle<MeasurementTracker> measurementTrackerHandle;
00119         edm::ESHandle<MagneticField> theMagField;
00120         edm::ESHandle<TrackerGeometry> trackerHandle;
00121         KFUpdator* theUpdator;
00122         PropagatorWithMaterial* thePropagator;  
00123         Chi2MeasurementEstimator* theEstimator;
00124         
00125         const NavigationSchool* theNavigationSchool;
00126         
00127         const edm::EventSetup *theSetup; 
00128         TrajectoryStateTransform transformer_; 
00129         PRecHitContainer recHits_; 
00130         PTrajectoryStateOnDet* pts_; 
00131         
00132         // member vectors to hold the good hits found between hit selection and combinatorics
00133         std::vector<const SiStripMatchedRecHit2D*> layer1Hits_;
00134         std::vector<const SiStripMatchedRecHit2D*> layer2Hits_;
00135         
00136         const SiStripRecHitMatcher* theMatcher_;
00137 
00138         std::string measurementTrackerName_;
00139         
00140 };
00141 
00142 #endif // ElectronSiStripSeedGenerator_H
00143 
00144 

Generated on Tue Jun 9 17:43:17 2009 for CMSSW by  doxygen 1.5.4