00001 #ifndef EgammaElectronAlgos_SiStripElectronAlgo_h
00002 #define EgammaElectronAlgos_SiStripElectronAlgo_h
00003
00004
00005
00006
00007
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <map>
00025
00026
00027
00028
00029
00030 #include "DataFormats/EgammaCandidates/interface/SiStripElectron.h"
00031 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00032 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00033 #include "MagneticField/Engine/interface/MagneticField.h"
00034 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00035 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
00036 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
00037 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
00038 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
00039 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00040 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00041 #include "DataFormats/Common/interface/Handle.h"
00042 #include "FWCore/Framework/interface/ESHandle.h"
00043 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00044 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00045 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00046 #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
00047 #include "TrackingTools/TrajectoryParametrization/interface/CurvilinearTrajectoryError.h"
00048 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00049 #include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
00050 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00051 #include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h"
00052 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00053 #include "DataFormats/RoadSearchCloud/interface/RoadSearchCloud.h"
00054 #include "DataFormats/RoadSearchCloud/interface/RoadSearchCloudCollection.h"
00055 #include "DataFormats/TrackCandidate/interface/TrackCandidate.h"
00056 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00057
00058 class SiStripElectronAlgo
00059 {
00060
00061 public:
00062 SiStripElectronAlgo(unsigned int maxHitsOnDetId,
00063 double originUncertainty,
00064 double phiBandWidth,
00065 double maxNormResid,
00066 unsigned int minHits,
00067 double maxReducedChi2);
00068
00069 virtual ~SiStripElectronAlgo();
00070
00071
00072
00073
00074
00075
00076
00077 void prepareEvent(const edm::ESHandle<TrackerGeometry>& tracker,
00078 const edm::Handle<SiStripRecHit2DCollection>& rphiHits,
00079 const edm::Handle<SiStripRecHit2DCollection>& stereoHits,
00080 const edm::Handle<SiStripMatchedRecHit2DCollection>& matchedHits,
00081 const edm::ESHandle<MagneticField>& magneticField);
00082
00083
00084
00085 bool findElectron(reco::SiStripElectronCollection& electronOut,
00086 TrackCandidateCollection& trackCandidateOut,
00087 const reco::SuperClusterRef& superclusterIn);
00088
00089 private:
00090 SiStripElectronAlgo(const SiStripElectronAlgo&);
00091
00092 const SiStripElectronAlgo& operator=(const SiStripElectronAlgo&);
00093
00094
00095
00096
00097
00098 void coarseHitSelection(std::vector<const SiStripRecHit2D*>& hitPointersOut,
00099 bool stereo, bool endcap);
00100 void coarseBarrelMonoHitSelection(std::vector<const SiStripRecHit2D*>& monoHitPointersOut );
00101 void coarseEndcapMonoHitSelection(std::vector<const SiStripRecHit2D*>& monoHitPointersOut );
00102 void coarseMatchedHitSelection(std::vector<const SiStripMatchedRecHit2D*>& coarseMatchedHitPointersOut);
00103
00104
00105
00106
00107
00108 bool projectPhiBand(float chargeHypothesis, const reco::SuperClusterRef& superclusterIn);
00109
00110 double unwrapPhi(double phi) const {
00111 while (phi > M_PI) { phi -= 2.*M_PI; }
00112 while (phi < -M_PI) { phi += 2.*M_PI; }
00113 return phi;
00114 }
00115
00116
00117
00118
00119 unsigned int maxHitsOnDetId_;
00120 double originUncertainty_;
00121 double phiBandWidth_;
00122 double maxNormResid_;
00123 unsigned int minHits_;
00124 double maxReducedChi2_;
00125
00126
00127 const TrackerGeometry* tracker_p_;
00128 const SiStripRecHit2DCollection* rphiHits_p_;
00129 const SiStripRecHit2DCollection* stereoHits_p_;
00130 const SiStripMatchedRecHit2DCollection* matchedHits_p_;
00131 const MagneticField* magneticField_p_;
00132
00133 const edm::Handle<SiStripRecHit2DCollection>* rphiHits_hp_;
00134 const edm::Handle<SiStripRecHit2DCollection>* stereoHits_hp_;
00135 const edm::Handle<SiStripMatchedRecHit2DCollection>* matchedHits_hp_;
00136
00137
00138 std::map<const SiStripRecHit2D*, unsigned int> rphiKey_;
00139 std::map<const SiStripRecHit2D*, unsigned int> stereoKey_;
00140 std::map<const SiStripMatchedRecHit2D*, unsigned int> matchedKey_;
00141
00142 std::map<const TrackingRecHit*, bool> hitUsed_;
00143 std::map<const TrackingRecHit*, bool> matchedHitUsed_;
00144
00145
00146 double redchi2_pos_;
00147 GlobalPoint position_pos_;
00148 GlobalVector momentum_pos_;
00149 const SiStripRecHit2D* innerhit_pos_;
00150 std::vector<const TrackingRecHit*> outputHits_pos_;
00151 edm::RefVector<SiStripRecHit2DCollection> outputRphiHits_pos_;
00152 edm::RefVector<SiStripRecHit2DCollection> outputStereoHits_pos_;
00153 edm::RefVector<SiStripRecHit2DCollection> outputMatchedHits_neg_;
00154
00155 double phiVsRSlope_pos_;
00156 double slope_pos_;
00157 double intercept_pos_;
00158 double chi2_pos_;
00159 int ndof_pos_;
00160 double correct_pT_pos_;
00161 double pZ_pos_;
00162 double zVsRSlope_pos_;
00163 unsigned int numberOfMatchedHits_pos_;
00164 unsigned int numberOfStereoHits_pos_;
00165 unsigned int numberOfBarrelRphiHits_pos_;
00166 unsigned int numberOfEndcapZphiHits_pos_;
00167
00168 double redchi2_neg_;
00169 GlobalPoint position_neg_;
00170 GlobalVector momentum_neg_;
00171 const SiStripRecHit2D* innerhit_neg_;
00172 std::vector<const TrackingRecHit*> outputHits_neg_;
00173 edm::RefVector<SiStripRecHit2DCollection> outputRphiHits_neg_;
00174 edm::RefVector<SiStripRecHit2DCollection> outputStereoHits_neg_;
00175 double phiVsRSlope_neg_;
00176 double slope_neg_;
00177 double intercept_neg_;
00178 double chi2_neg_;
00179 int ndof_neg_;
00180 double correct_pT_neg_;
00181 double pZ_neg_;
00182 double zVsRSlope_neg_;
00183 unsigned numberOfStereoHits_neg_;
00184 unsigned numberOfBarrelRphiHits_neg_;
00185 unsigned numberOfEndcapZphiHits_neg_;
00186 };
00187
00188
00189 #endif