Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <memory>
00016 #include <sstream>
00017
00018
00019 #include "DataFormats/EgammaCandidates/interface/SiStripElectronFwd.h"
00020 #include "SiStripElectronProducer.h"
00021 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00022 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00023
00024 #include "FWCore/Framework/interface/Event.h"
00025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00026 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00027
00028 #include "DataFormats/Common/interface/Handle.h"
00029 #include "FWCore/Framework/interface/ESHandle.h"
00030 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00031 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
00032 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
00033 #include "MagneticField/Engine/interface/MagneticField.h"
00034 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 SiStripElectronProducer::SiStripElectronProducer(const edm::ParameterSet& iConfig)
00048 {
00049
00050 siStripElectronsLabel_ = iConfig.getParameter<std::string>("siStripElectronsLabel");
00051 trackCandidatesLabel_ = iConfig.getParameter<std::string>("trackCandidatesLabel");
00052 produces<reco::SiStripElectronCollection>(siStripElectronsLabel_);
00053 produces<TrackCandidateCollection>(trackCandidatesLabel_);
00054
00055
00056 siHitProducer_ = iConfig.getParameter<std::string>("siHitProducer");
00057 siRphiHitCollection_ = iConfig.getParameter<std::string>("siRphiHitCollection");
00058 siStereoHitCollection_ = iConfig.getParameter<std::string>("siStereoHitCollection");
00059 siMatchedHitCollection_ = iConfig.getParameter<std::string>("siMatchedHitCollection");
00060
00061 superClusterProducer_ = iConfig.getParameter<std::string>("superClusterProducer");
00062 superClusterCollection_ = iConfig.getParameter<std::string>("superClusterCollection");
00063
00064 algo_p = new SiStripElectronAlgo(
00065 iConfig.getParameter<int32_t>("maxHitsOnDetId"),
00066 iConfig.getParameter<double>("originUncertainty"),
00067 iConfig.getParameter<double>("phiBandWidth"),
00068 iConfig.getParameter<double>("maxNormResid"),
00069 iConfig.getParameter<int32_t>("minHits"),
00070 iConfig.getParameter<double>("maxReducedChi2"));
00071
00072 LogDebug("") << " Welcome to SiStripElectronProducer " ;
00073
00074 }
00075
00076
00077
00078
00079
00080
00081
00082 SiStripElectronProducer::~SiStripElectronProducer()
00083 {
00084
00085
00086 delete algo_p;
00087 }
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 void
00107 SiStripElectronProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00108 {
00109
00110 edm::ESHandle<TrackerGeometry> trackerHandle;
00111 iSetup.get<TrackerDigiGeometryRecord>().get(trackerHandle);
00112
00113 edm::Handle<SiStripRecHit2DCollection> rphiHitsHandle;
00114 iEvent.getByLabel(siHitProducer_, siRphiHitCollection_, rphiHitsHandle);
00115
00116 edm::Handle<SiStripRecHit2DCollection> stereoHitsHandle;
00117 iEvent.getByLabel(siHitProducer_, siStereoHitCollection_, stereoHitsHandle);
00118
00119 edm::Handle<SiStripMatchedRecHit2DCollection> matchedHitsHandle;
00120 iEvent.getByLabel(siHitProducer_, siMatchedHitCollection_, matchedHitsHandle);
00121
00122 edm::ESHandle<MagneticField> magneticFieldHandle;
00123 iSetup.get<IdealMagneticFieldRecord>().get(magneticFieldHandle);
00124
00125 edm::Handle<reco::SuperClusterCollection> superClusterHandle;
00126 iEvent.getByLabel(superClusterProducer_, superClusterCollection_, superClusterHandle);
00127
00128
00129 algo_p->prepareEvent(trackerHandle, rphiHitsHandle, stereoHitsHandle, matchedHitsHandle, magneticFieldHandle);
00130
00131
00132 std::auto_ptr<reco::SiStripElectronCollection> electronOut(new reco::SiStripElectronCollection);
00133 std::auto_ptr<TrackCandidateCollection> trackCandidateOut(new TrackCandidateCollection);
00134
00135
00136 edm::ESHandle<TrackerTopology> tTopoHand;
00137 iSetup.get<IdealGeometryRecord>().get(tTopoHand);
00138 const TrackerTopology *tTopo=tTopoHand.product();
00139
00140
00141 int siStripElectCands = 0 ;
00142
00143 std::ostringstream str;
00144
00145
00146
00147 str << "Starting loop over superclusters."<< "\n" << std::endl;
00148 for (unsigned int i = 0; i < superClusterHandle.product()->size(); i++) {
00149 const reco::SuperCluster* sc = &(*reco::SuperClusterRef(superClusterHandle, i));
00150 double energy = sc->energy();
00151
00152 if (algo_p->findElectron(*electronOut, *trackCandidateOut, reco::SuperClusterRef(superClusterHandle, i),tTopo)) {
00153 str << "Supercluster energy: " << energy << ", FOUND an electron." << "\n" << std::endl;
00154 ++siStripElectCands ;
00155 }
00156 else {
00157 str << "Supercluster energy: " << energy << ", DID NOT FIND an electron."<< "\n" << std::endl;
00158 }
00159 }
00160 str << "Ending loop over superclusters." << "\n" << std::endl;
00161
00162 str << " Found " << siStripElectCands
00163 << " SiStripElectron Candidates before track fit "
00164 << "\n" << std::endl ;
00165
00166 LogDebug("SiStripElectronProducer") << str.str();
00167
00168
00169 iEvent.put(electronOut, siStripElectronsLabel_);
00170 iEvent.put(trackCandidateOut, trackCandidatesLabel_);
00171 }
00172
00173
00174
00175
00176
00177
00178
00179