Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-09-11 04:32:44

0001 // -*- C++ -*-
0002 //
0003 // Package:    ESRecoSummary
0004 // Class:      ESRecoSummary
0005 // Original Author:  Martina Malberti
0006 //
0007 // system include files
0008 #include <cmath>
0009 #include <iostream>
0010 #include <memory>
0011 
0012 // user include files
0013 #include "DQMOffline/Ecal/interface/ESRecoSummary.h"
0014 
0015 #include "FWCore/Framework/interface/Frameworkfwd.h"
0016 
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019 
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 
0022 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0023 #include "Geometry/Records/interface/CaloTopologyRecord.h"
0024 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0025 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
0026 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h"
0027 #include "Geometry/CaloTopology/interface/CaloTopology.h"
0028 
0029 #include "DataFormats/EcalDetId/interface/ESDetId.h"
0030 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0031 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
0032 #include "DataFormats/EgammaReco/interface/PreshowerCluster.h"
0033 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0034 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
0035 #include "RecoEcal/EgammaCoreTools/interface/EcalTools.h"
0036 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalCleaningAlgo.h"
0037 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
0038 
0039 //
0040 // constructors and destructor
0041 //
0042 ESRecoSummary::ESRecoSummary(const edm::ParameterSet &ps) {
0043   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
0044 
0045   // now do what ever initialization is needed
0046   esRecHitCollection_ = consumes<ESRecHitCollection>(ps.getParameter<edm::InputTag>("recHitCollection_ES"));
0047   esClusterCollectionX_ =
0048       consumes<reco::PreshowerClusterCollection>(ps.getParameter<edm::InputTag>("ClusterCollectionX_ES"));
0049   esClusterCollectionY_ =
0050       consumes<reco::PreshowerClusterCollection>(ps.getParameter<edm::InputTag>("ClusterCollectionY_ES"));
0051 
0052   superClusterCollection_EE_ =
0053       consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("superClusterCollection_EE"));
0054 }
0055 
0056 void ESRecoSummary::bookHistograms(DQMStore::IBooker &iBooker, edm::Run const &, edm::EventSetup const &) {
0057   // Monitor Elements (ex THXD)
0058   iBooker.setCurrentFolder(prefixME_ + "/ESRecoSummary");  // to organise the histos in folders
0059 
0060   // Preshower ----------------------------------------------
0061   h_recHits_ES_energyMax = iBooker.book1D("recHits_ES_energyMax", "recHits_ES_energyMax", 200, 0., 0.01);
0062   h_recHits_ES_time = iBooker.book1D("recHits_ES_time", "recHits_ES_time", 200, -100., 100.);
0063 
0064   h_esClusters_energy_plane1 = iBooker.book1D("esClusters_energy_plane1", "esClusters_energy_plane1", 200, 0., 0.01);
0065   h_esClusters_energy_plane2 = iBooker.book1D("esClusters_energy_plane2", "esClusters_energy_plane2", 200, 0., 0.01);
0066   h_esClusters_energy_ratio = iBooker.book1D("esClusters_energy_ratio", "esClusters_energy_ratio", 200, 0., 20.);
0067 }
0068 
0069 //
0070 // member functions
0071 //
0072 
0073 // ------------ method called to for each event  ------------
0074 void ESRecoSummary::analyze(const edm::Event &ev, const edm::EventSetup &) {
0075   // Preshower RecHits
0076   edm::Handle<ESRecHitCollection> recHitsES;
0077   ev.getByToken(esRecHitCollection_, recHitsES);
0078   const ESRecHitCollection *thePreShowerRecHits = recHitsES.product();
0079 
0080   if (!recHitsES.isValid()) {
0081     std::cerr << "ESRecoSummary::analyze --> recHitsES not found" << std::endl;
0082   }
0083 
0084   float maxRecHitEnergyES = -999.;
0085 
0086   for (ESRecHitCollection::const_iterator esItr = thePreShowerRecHits->begin(); esItr != thePreShowerRecHits->end();
0087        ++esItr) {
0088     h_recHits_ES_time->Fill(esItr->time());
0089     if (esItr->energy() > maxRecHitEnergyES)
0090       maxRecHitEnergyES = esItr->energy();
0091 
0092   }  // end loop over ES rec Hits
0093 
0094   h_recHits_ES_energyMax->Fill(maxRecHitEnergyES);
0095 
0096   // ES clusters in X plane
0097   edm::Handle<reco::PreshowerClusterCollection> esClustersX;
0098   ev.getByToken(esClusterCollectionX_, esClustersX);
0099   const reco::PreshowerClusterCollection *ESclustersX = esClustersX.product();
0100 
0101   // ES clusters in Y plane
0102   edm::Handle<reco::PreshowerClusterCollection> esClustersY;
0103   ev.getByToken(esClusterCollectionY_, esClustersY);
0104   const reco::PreshowerClusterCollection *ESclustersY = esClustersY.product();
0105 
0106   // ... endcap
0107   edm::Handle<reco::SuperClusterCollection> superClusters_EE_h;
0108   ev.getByToken(superClusterCollection_EE_, superClusters_EE_h);
0109   const reco::SuperClusterCollection *theEndcapSuperClusters = superClusters_EE_h.product();
0110   if (!superClusters_EE_h.isValid()) {
0111     std::cerr << "EcalRecHitSummary::analyze --> superClusters_EE_h not found" << std::endl;
0112   }
0113 
0114   // loop over all super clusters
0115   for (reco::SuperClusterCollection::const_iterator itSC = theEndcapSuperClusters->begin();
0116        itSC != theEndcapSuperClusters->end();
0117        ++itSC) {
0118     if (fabs(itSC->eta()) < 1.65 || fabs(itSC->eta()) > 2.6)
0119       continue;
0120 
0121     float ESenergyPlane1 = 0.;
0122     float ESenergyPlane2 = 0.;
0123 
0124     // Loop over all ECAL Basic clusters in the supercluster
0125     for (reco::CaloCluster_iterator ecalBasicCluster = itSC->clustersBegin(); ecalBasicCluster != itSC->clustersEnd();
0126          ecalBasicCluster++) {
0127       const reco::CaloClusterPtr ecalBasicClusterPtr = *(ecalBasicCluster);
0128 
0129       for (reco::PreshowerClusterCollection::const_iterator iESClus = ESclustersX->begin();
0130            iESClus != ESclustersX->end();
0131            ++iESClus) {
0132         const reco::CaloClusterPtr preshBasicCluster = iESClus->basicCluster();
0133         const reco::PreshowerCluster *esCluster = &*iESClus;
0134         if (preshBasicCluster == ecalBasicClusterPtr) {
0135           ESenergyPlane1 += esCluster->energy();
0136         }
0137       }  // end of x loop
0138 
0139       for (reco::PreshowerClusterCollection::const_iterator iESClus = ESclustersY->begin();
0140            iESClus != ESclustersY->end();
0141            ++iESClus) {
0142         const reco::CaloClusterPtr preshBasicCluster = iESClus->basicCluster();
0143         const reco::PreshowerCluster *esCluster = &*iESClus;
0144         if (preshBasicCluster == ecalBasicClusterPtr) {
0145           ESenergyPlane2 += esCluster->energy();
0146         }
0147       }  // end of y loop
0148     }  // end loop over all basic clusters in the supercluster
0149 
0150     // cout<<"DQM : "<<ESenergyPlane1<<" "<<ESenergyPlane2<<endl;
0151     h_esClusters_energy_plane1->Fill(ESenergyPlane1);
0152     h_esClusters_energy_plane2->Fill(ESenergyPlane2);
0153     if (ESenergyPlane1 > 0 && ESenergyPlane2 > 0)
0154       h_esClusters_energy_ratio->Fill(ESenergyPlane1 / ESenergyPlane2);
0155 
0156   }  // end loop over superclusters
0157 }
0158 
0159 // define this as a plug-in
0160 DEFINE_FWK_MODULE(ESRecoSummary);