Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include <memory>
00009 #include <iostream>
00010
00011
00012 #include "FWCore/Framework/interface/Frameworkfwd.h"
00013 #include "FWCore/Framework/interface/EDAnalyzer.h"
00014
00015 #include "FWCore/Framework/interface/Event.h"
00016 #include "FWCore/Framework/interface/MakerMacros.h"
00017 #include "FWCore/Common/interface/EventBase.h"
00018 #include "DataFormats/Provenance/interface/EventAuxiliary.h"
00019
00020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00021 #include "FWCore/ServiceRegistry/interface/Service.h"
00022 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00023
00024
00025 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00026 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00027 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00028 #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
00029 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h"
00030 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00031 #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h"
00032 #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h"
00033
00034 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00035 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00036 #include "DataFormats/EcalDetId/interface/ESDetId.h"
00037 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00038 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00039 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00040 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00041 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00042 #include "DataFormats/EgammaReco/interface/PreshowerCluster.h"
00043 #include "DataFormats/EgammaReco/interface/PreshowerClusterFwd.h"
00044 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
00045 #include "RecoEcal/EgammaCoreTools/interface/EcalTools.h"
00046 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
00047 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalCleaningAlgo.h"
00048 #include "RecoEcal/EgammaCoreTools/interface/EcalRecHitLess.h"
00049
00050 #include "DataFormats/TrackReco/interface/Track.h"
00051 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00052
00053 #include "DataFormats/JetReco/interface/CaloJet.h"
00054 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00055
00056 #include "DQMOffline/Ecal/interface/ESRecoSummary.h"
00057 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00058 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00059 #include "MagneticField/Engine/interface/MagneticField.h"
00060
00061 #include "TVector3.h"
00062
00063 #include <iostream>
00064 #include <cmath>
00065 #include <fstream>
00066
00067
00068
00069
00070 ESRecoSummary::ESRecoSummary(const edm::ParameterSet& ps)
00071 {
00072
00073 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00074
00075
00076 esRecHitCollection_ = ps.getParameter<edm::InputTag>("recHitCollection_ES");
00077 esClusterCollectionX_ = ps.getParameter<edm::InputTag>("ClusterCollectionX_ES");
00078 esClusterCollectionY_ = ps.getParameter<edm::InputTag>("ClusterCollectionY_ES");
00079
00080 dqmStore_ = edm::Service<DQMStore>().operator->();
00081
00082
00083 dqmStore_->setCurrentFolder(prefixME_ + "/ESRecoSummary");
00084
00085 superClusterCollection_EE_ = ps.getParameter<edm::InputTag>("superClusterCollection_EE");
00086
00087
00088 h_recHits_ES_energyMax = dqmStore_->book1D("recHits_ES_energyMax","recHits_ES_energyMax",200,0.,0.01);
00089 h_recHits_ES_time = dqmStore_->book1D("recHits_ES_time","recHits_ES_time",200,-100.,100.);
00090
00091 h_esClusters_energy_plane1 = dqmStore_->book1D("esClusters_energy_plane1","esClusters_energy_plane1",200,0.,0.01);
00092 h_esClusters_energy_plane2 = dqmStore_->book1D("esClusters_energy_plane2","esClusters_energy_plane2",200,0.,0.01);
00093 h_esClusters_energy_ratio = dqmStore_->book1D("esClusters_energy_ratio","esClusters_energy_ratio",200,0.,20.);
00094
00095 }
00096
00097
00098
00099 ESRecoSummary::~ESRecoSummary()
00100 {
00101
00102
00103 }
00104
00105
00106
00107
00108
00109
00110
00111 void ESRecoSummary::analyze(const edm::Event& ev, const edm::EventSetup& iSetup)
00112 {
00113
00114
00115 edm::ESHandle<MagneticField> theMagField;
00116 iSetup.get<IdealMagneticFieldRecord>().get(theMagField);
00117
00118
00119 edm::Handle<ESRecHitCollection> recHitsES;
00120 ev.getByLabel (esRecHitCollection_, recHitsES) ;
00121 const ESRecHitCollection* thePreShowerRecHits = recHitsES.product () ;
00122
00123 if ( ! recHitsES.isValid() ) {
00124 std::cerr << "ESRecoSummary::analyze --> recHitsES not found" << std::endl;
00125 }
00126
00127 float maxRecHitEnergyES = -999.;
00128
00129 for (ESRecHitCollection::const_iterator esItr = thePreShowerRecHits->begin(); esItr != thePreShowerRecHits->end(); ++esItr)
00130 {
00131
00132 h_recHits_ES_time -> Fill(esItr->time());
00133 if (esItr -> energy() > maxRecHitEnergyES ) maxRecHitEnergyES = esItr -> energy() ;
00134
00135 }
00136
00137 h_recHits_ES_energyMax -> Fill(maxRecHitEnergyES );
00138
00139
00140 edm::Handle<reco::PreshowerClusterCollection> esClustersX;
00141 ev.getByLabel( esClusterCollectionX_, esClustersX);
00142 const reco::PreshowerClusterCollection *ESclustersX = esClustersX.product();
00143
00144
00145 edm::Handle<reco::PreshowerClusterCollection> esClustersY;
00146 ev.getByLabel( esClusterCollectionY_, esClustersY);
00147 const reco::PreshowerClusterCollection *ESclustersY = esClustersY.product();
00148
00149
00150
00151 edm::Handle<reco::SuperClusterCollection> superClusters_EE_h;
00152 ev.getByLabel( superClusterCollection_EE_, superClusters_EE_h );
00153 const reco::SuperClusterCollection* theEndcapSuperClusters = superClusters_EE_h.product () ;
00154 if ( ! superClusters_EE_h.isValid() ) {
00155 std::cerr << "EcalRecHitSummary::analyze --> superClusters_EE_h not found" << std::endl;
00156 }
00157
00158
00159 for (reco::SuperClusterCollection::const_iterator itSC = theEndcapSuperClusters->begin();
00160 itSC != theEndcapSuperClusters->end(); ++itSC ) {
00161
00162 if ( fabs(itSC->eta()) < 1.65 || fabs(itSC->eta()) > 2.6 ) continue;
00163
00164 float ESenergyPlane1 = 0.;
00165 float ESenergyPlane2 = 0.;
00166
00167
00168
00169 for (reco::CaloCluster_iterator ecalBasicCluster = itSC->clustersBegin(); ecalBasicCluster!= itSC->clustersEnd();
00170 ecalBasicCluster++) {
00171 const reco::CaloClusterPtr ecalBasicClusterPtr = *(ecalBasicCluster);
00172
00173 for (reco::PreshowerClusterCollection::const_iterator iESClus = ESclustersX->begin(); iESClus != ESclustersX->end();
00174 ++iESClus) {
00175 const reco::CaloClusterPtr preshBasicCluster = iESClus->basicCluster();
00176 const reco::PreshowerCluster *esCluster = &*iESClus;
00177 if (preshBasicCluster == ecalBasicClusterPtr) {
00178 ESenergyPlane1 += esCluster->energy();
00179 }
00180 }
00181
00182 for (reco::PreshowerClusterCollection::const_iterator iESClus = ESclustersY->begin(); iESClus != ESclustersY->end();
00183 ++iESClus) {
00184 const reco::CaloClusterPtr preshBasicCluster = iESClus->basicCluster();
00185 const reco::PreshowerCluster *esCluster = &*iESClus;
00186 if (preshBasicCluster == ecalBasicClusterPtr) {
00187 ESenergyPlane2 += esCluster->energy();
00188 }
00189 }
00190 }
00191
00192
00193 h_esClusters_energy_plane1->Fill(ESenergyPlane1);
00194 h_esClusters_energy_plane2->Fill(ESenergyPlane2);
00195 if (ESenergyPlane1 > 0 && ESenergyPlane2 > 0) h_esClusters_energy_ratio -> Fill(ESenergyPlane1/ESenergyPlane2);
00196
00197 }
00198
00199 }
00200
00201
00202
00203 void
00204 ESRecoSummary::beginJob()
00205 {
00206 }
00207
00208
00209 void
00210 ESRecoSummary::endJob()
00211 {}
00212
00213
00214 DEFINE_FWK_MODULE(ESRecoSummary);