CMS 3D CMS Logo

SiStripElectronAlgo.h

Go to the documentation of this file.
00001 #ifndef EgammaElectronAlgos_SiStripElectronAlgo_h
00002 #define EgammaElectronAlgos_SiStripElectronAlgo_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     EgammaElectronAlgos
00006 // Class  :     SiStripElectronAlgo
00007 // 
00016 //
00017 // Original Author:  Jim Pivarski
00018 //         Created:  Fri May 26 16:11:58 EDT 2006
00019 // $Id: SiStripElectronAlgo.h,v 1.15 2007/03/08 18:34:11 futyand Exp $
00020 //
00021 
00022 // system include files
00023 
00024 #include <map>
00025 
00026 // user include files
00027 
00028 // forward declarations
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       // ---------- const member functions ---------------------
00072 
00073       // ---------- static member functions --------------------
00074 
00075       // ---------- member functions ---------------------------
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       // returns true iff an electron/positron was found
00084       // and inserts SiStripElectron and trackCandidate into electronOut and trackCandidateOut
00085       bool findElectron(reco::SiStripElectronCollection& electronOut,
00086                         TrackCandidateCollection& trackCandidateOut,
00087                         const reco::SuperClusterRef& superclusterIn);
00088 
00089    private:
00090       SiStripElectronAlgo(const SiStripElectronAlgo&); // stop default
00091 
00092       const SiStripElectronAlgo& operator=(const SiStripElectronAlgo&); // stop default
00093 
00094       // inserts pointers to good hits into hitPointersOut
00095       // selects hits on DetIds that have no more than maxHitsOnDetId_
00096       // selects from stereo if stereo == true, rphi otherwise
00097       // selects from TID or TEC if endcap == true, TIB or TOB otherwise
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       // projects a phi band of width phiBandWidth_ from supercluster into tracker (given a chargeHypothesis)
00106       // fills *_pos_ or *_neg_ member data with the results
00107       // returns true iff the electron/positron passes cuts
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       // ---------- member data --------------------------------
00117 
00118       // parameters
00119       unsigned int maxHitsOnDetId_;
00120       double originUncertainty_;
00121       double phiBandWidth_;
00122       double maxNormResid_;
00123       unsigned int minHits_;
00124       double maxReducedChi2_;
00125 
00126       // changes with each event
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

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