CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/DQMOffline/Ecal/src/ESRecoSummary.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    ESRecoSummary
00004 // Class:      ESRecoSummary
00005 // Original Author:  Martina Malberti
00006 // 
00007 // system include files
00008 #include <memory>
00009 #include <iostream>
00010 
00011 // user include files
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 //using namespace std;
00067 //
00068 // constructors and destructor
00069 //
00070 ESRecoSummary::ESRecoSummary(const edm::ParameterSet& ps)
00071 {
00072 
00073   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00074 
00075   //now do what ever initialization is needed
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   // Monitor Elements (ex THXD)
00083   dqmStore_->setCurrentFolder(prefixME_ + "/ESRecoSummary"); // to organise the histos in folders
00084 
00085   superClusterCollection_EE_ = ps.getParameter<edm::InputTag>("superClusterCollection_EE");
00086      
00087   // Preshower ----------------------------------------------
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         // do anything here that needs to be done at desctruction time
00102         // (e.g. close files, deallocate resources etc.)
00103 }
00104 
00105 
00106 //
00107 // member functions
00108 //
00109 
00110 // ------------ method called to for each event  ------------
00111 void ESRecoSummary::analyze(const edm::Event& ev, const edm::EventSetup& iSetup)
00112 {
00113   
00114   //Get the magnetic field
00115   edm::ESHandle<MagneticField> theMagField;
00116   iSetup.get<IdealMagneticFieldRecord>().get(theMagField);
00117 
00118   //Preshower RecHits
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     } // end loop over ES rec Hits
00136 
00137   h_recHits_ES_energyMax -> Fill(maxRecHitEnergyES ); 
00138 
00139   // ES clusters in X plane
00140   edm::Handle<reco::PreshowerClusterCollection> esClustersX;
00141   ev.getByLabel( esClusterCollectionX_, esClustersX);
00142   const reco::PreshowerClusterCollection *ESclustersX = esClustersX.product();
00143 
00144   // ES clusters in Y plane
00145   edm::Handle<reco::PreshowerClusterCollection> esClustersY;
00146   ev.getByLabel( esClusterCollectionY_, esClustersY);
00147   const reco::PreshowerClusterCollection *ESclustersY = esClustersY.product(); 
00148   
00149 
00150   // ... endcap
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   // loop over all super clusters
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     // Loop over all ECAL Basic clusters in the supercluster
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       }  // end of x loop
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       } // end of y loop
00190     } // end loop over all basic clusters in the supercluster
00191 
00192     //cout<<"DQM : "<<ESenergyPlane1<<" "<<ESenergyPlane2<<endl;
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   }// end loop over superclusters
00198 
00199 }
00200 
00201 
00202 // ------------ method called once each job just before starting event loop  ------------
00203         void 
00204 ESRecoSummary::beginJob()
00205 {
00206 }
00207 
00208 // ------------ method called once each job just after ending the event loop  ------------
00209 void 
00210 ESRecoSummary::endJob() 
00211 {}
00212 
00213 //define this as a plug-in
00214 DEFINE_FWK_MODULE(ESRecoSummary);