CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/DQMOffline/Ecal/src/EERecoSummary.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    EERecoSummary
00004 // Class:      EERecoSummary
00005 // Original Author:  Martina Malberti
00006 // 
00007 // system include files
00008 #include <memory>
00009 
00010 // user include files
00011 #include "FWCore/Framework/interface/Frameworkfwd.h"
00012 #include "FWCore/Framework/interface/EDAnalyzer.h"
00013 
00014 #include "FWCore/Framework/interface/Event.h"
00015 #include "FWCore/Framework/interface/MakerMacros.h"
00016 #include "FWCore/Common/interface/EventBase.h"
00017 #include "DataFormats/Provenance/interface/EventAuxiliary.h"
00018 
00019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00022 
00023 
00024 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00025 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00026 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00027 #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
00028 #include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h"
00029 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00030 #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h"
00031 #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h"
00032 
00033 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00034 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00035 #include "DataFormats/EcalDetId/interface/ESDetId.h"
00036 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00037 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00038 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00039 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00040 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00041 #include "DataFormats/EgammaReco/interface/PreshowerCluster.h"
00042 #include "DataFormats/EgammaReco/interface/PreshowerClusterFwd.h"
00043 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
00044 #include "RecoEcal/EgammaCoreTools/interface/EcalTools.h"
00045 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
00046 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalCleaningAlgo.h"
00047 #include "RecoEcal/EgammaCoreTools/interface/EcalRecHitLess.h"
00048 
00049 #include "DataFormats/TrackReco/interface/Track.h"
00050 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00051 
00052 #include "DataFormats/JetReco/interface/CaloJet.h"
00053 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00054 
00055 #include "DQMOffline/Ecal/interface/EERecoSummary.h"
00056 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00057 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00058 #include "MagneticField/Engine/interface/MagneticField.h"
00059 
00060 #include "TVector3.h"
00061 
00062 #include <iostream>
00063 #include <cmath>
00064 #include <fstream>
00065 
00066 //
00067 // constructors and destructor
00068 //
00069 EERecoSummary::EERecoSummary(const edm::ParameterSet& ps)
00070 {
00071 
00072   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00073 
00074   //now do what ever initialization is needed
00075   recHitCollection_EE_       = ps.getParameter<edm::InputTag>("recHitCollection_EE");
00076   redRecHitCollection_EE_    = ps.getParameter<edm::InputTag>("redRecHitCollection_EE");
00077   basicClusterCollection_EE_ = ps.getParameter<edm::InputTag>("basicClusterCollection_EE");
00078   superClusterCollection_EE_ = ps.getParameter<edm::InputTag>("superClusterCollection_EE");
00079 
00080   ethrEE_                    = ps.getParameter<double>("ethrEE");
00081 
00082   scEtThrEE_                 = ps.getParameter<double>("scEtThrEE");
00083 
00084   // DQM Store -------------------
00085   dqmStore_ = edm::Service<DQMStore>().operator->();
00086 
00087   // Monitor Elements (ex THXD)
00088   dqmStore_->setCurrentFolder(prefixME_ + "/EERecoSummary"); // to organise the histos in folders
00089      
00090   // ReducedRecHits ----------------------------------------------
00091   // ... endcap 
00092   h_redRecHits_EE_recoFlag = dqmStore_->book1D("redRecHits_EE_recoFlag","redRecHits_EE_recoFlag",16,-0.5,15.5);  
00093 
00094   // RecHits ---------------------------------------------- 
00095   // ... endcap
00096   h_recHits_EE_recoFlag = dqmStore_->book1D("recHits_EE_recoFlag","recHits_EE_recoFlag",16,-0.5,15.5);  
00097 
00098   // ... endcap +
00099   h_recHits_EEP_energyMax     = dqmStore_->book1D("recHits_EEP_energyMax","recHitsEEP_energyMax",110,-10,100);
00100   h_recHits_EEP_Chi2          = dqmStore_->book1D("recHits_EEP_Chi2","recHits_EEP_Chi2",200,0,100);
00101 
00102   // ... endcap -
00103   h_recHits_EEM_energyMax     = dqmStore_->book1D("recHits_EEM_energyMax","recHits_EEM_energyMax",110,-10,100);
00104   h_recHits_EEM_Chi2          = dqmStore_->book1D("recHits_EEM_Chi2","recHits_EEM_Chi2",200,0,100);
00105 
00106   // Basic Clusters ----------------------------------------------    
00107   // ... associated endcap rec hits
00108   h_basicClusters_recHits_EE_recoFlag = dqmStore_->book1D("basicClusters_recHits_EE_recoFlag","basicClusters_recHits_EE_recoFlag",16,-0.5,15.5);  
00109 
00110   // Super Clusters ----------------------------------------------
00111   // ... endcap
00112   h_superClusters_EEP_nBC    = dqmStore_->book1D("superClusters_EEP_nBC","superClusters_EEP_nBC",100,0.,100.);
00113   h_superClusters_EEM_nBC    = dqmStore_->book1D("superClusters_EEM_nBC","superClusters_EEM_nBC",100,0.,100.);
00114 
00115   h_superClusters_eta        = dqmStore_->book1D("superClusters_eta","superClusters_eta",150,-3.,3.);
00116   h_superClusters_EE_phi     = dqmStore_->book1D("superClusters_EE_phi","superClusters_EE_phi",360,-3.1415927,3.1415927);
00117   
00118 }
00119 
00120 
00121 
00122 EERecoSummary::~EERecoSummary()
00123 {
00124         // do anything here that needs to be done at desctruction time
00125         // (e.g. close files, deallocate resources etc.)
00126 }
00127 
00128 
00129 //
00130 // member functions
00131 //
00132 
00133 // ------------ method called to for each event  ------------
00134 void EERecoSummary::analyze(const edm::Event& ev, const edm::EventSetup& iSetup)
00135 {
00136   
00137   //Get the magnetic field
00138   edm::ESHandle<MagneticField> theMagField;
00139   iSetup.get<IdealMagneticFieldRecord>().get(theMagField);
00140 
00141   // calo geometry
00142   edm::ESHandle<CaloGeometry> pGeometry;
00143   iSetup.get<CaloGeometryRecord>().get(pGeometry);
00144   const CaloGeometry *geometry = pGeometry.product();
00145 
00146   // --- REDUCED REC HITS ------------------------------------------------------------------------------------- 
00147   // ... endcap
00148   edm::Handle<EcalRecHitCollection> redRecHitsEE;
00149   ev.getByLabel( redRecHitCollection_EE_, redRecHitsEE );
00150   const EcalRecHitCollection* theEndcapEcalredRecHits = redRecHitsEE.product () ;
00151   if ( ! redRecHitsEE.isValid() ) {
00152     edm::LogWarning("EERecoSummary") << "redRecHitsEE not found"; 
00153   }
00154   
00155   for ( EcalRecHitCollection::const_iterator itr = theEndcapEcalredRecHits->begin () ;
00156         itr != theEndcapEcalredRecHits->end () ; ++itr)
00157   {
00158       
00159     EEDetId eeid( itr -> id() );
00160     GlobalPoint mycell = geometry->getPosition(itr->detid());
00161 
00162     h_redRecHits_EE_recoFlag->Fill( itr -> recoFlag() );
00163 
00164   }
00165 
00166   // --- REC HITS ------------------------------------------------------------------------------------- 
00167   
00168   // ... endcap
00169   edm::Handle<EcalRecHitCollection> recHitsEE;
00170   ev.getByLabel( recHitCollection_EE_, recHitsEE );
00171   const EcalRecHitCollection* theEndcapEcalRecHits = recHitsEE.product () ;
00172   if ( ! recHitsEE.isValid() ) {
00173     edm::LogWarning("EERecoSummary") << "recHitsEE not found"; 
00174   }
00175 
00176   float maxRecHitEnergyEEP = -999.;
00177   float maxRecHitEnergyEEM = -999.;
00178 
00179   EEDetId eeid_MrecHitEEM;
00180   EEDetId eeid_MrecHitEEP;
00181 
00182   for ( EcalRecHitCollection::const_iterator itr = theEndcapEcalRecHits->begin () ;
00183         itr != theEndcapEcalRecHits->end () ; ++itr)
00184     {
00185       
00186       EEDetId eeid( itr -> id() );
00187       GlobalPoint mycell = geometry->getPosition(itr->detid());
00188 
00189       // EE+
00190       if ( eeid.zside() > 0 ){
00191 
00192         h_recHits_EE_recoFlag       -> Fill( itr -> recoFlag() );
00193 
00194         // max E rec hit
00195         if (itr -> energy() > maxRecHitEnergyEEP && 
00196             !(eeid.ix()>=41 && eeid.ix()<=60 && eeid.iy()>=41 && eeid.iy()<=60) ) {
00197           maxRecHitEnergyEEP = itr -> energy() ;
00198         }
00199         
00200         // only channels above noise
00201         if (  itr -> energy() > ethrEE_ ){
00202           h_recHits_EEP_Chi2          -> Fill( itr -> chi2() );
00203         }
00204       }
00205       
00206       // EE-
00207       if ( eeid.zside() < 0 ){
00208         
00209         h_recHits_EE_recoFlag       -> Fill( itr -> recoFlag() );
00210         
00211         // max E rec hit
00212         if (itr -> energy() > maxRecHitEnergyEEM && 
00213             !(eeid.ix()>=41 && eeid.ix()<=60 && eeid.iy()>=41 && eeid.iy()<=60) ) {
00214           maxRecHitEnergyEEM = itr -> energy() ;
00215         }
00216         
00217         // only channels above noise
00218         if (  itr -> energy() > ethrEE_ ) {
00219           h_recHits_EEM_Chi2          -> Fill( itr -> chi2() );
00220 
00221         }
00222 
00223       }
00224     } // end loop over EE rec hits
00225 
00226   // energy
00227   h_recHits_EEP_energyMax -> Fill( maxRecHitEnergyEEP );
00228   h_recHits_EEM_energyMax -> Fill( maxRecHitEnergyEEM );
00229 
00230   //--- BASIC CLUSTERS --------------------------------------------------------------
00231 
00232   // ... endcap
00233   edm::Handle<reco::BasicClusterCollection> basicClusters_EE_h;
00234   ev.getByLabel( basicClusterCollection_EE_, basicClusters_EE_h );
00235   if ( ! basicClusters_EE_h.isValid() ) {
00236     edm::LogWarning("EERecoSummary") << "basicClusters_EE_h not found"; 
00237   }
00238 
00239   for (unsigned int icl = 0; icl < basicClusters_EE_h->size(); ++icl) {
00240     
00241     //Get the associated RecHits
00242     const std::vector<std::pair<DetId,float> > & hits= (*basicClusters_EE_h)[icl].hitsAndFractions();
00243     for (std::vector<std::pair<DetId,float> > ::const_iterator rh = hits.begin(); rh!=hits.end(); ++rh){
00244       
00245       EBRecHitCollection::const_iterator itrechit = theEndcapEcalRecHits->find((*rh).first);
00246       if (itrechit==theEndcapEcalRecHits->end()) continue;
00247       h_basicClusters_recHits_EE_recoFlag -> Fill ( itrechit -> recoFlag() );
00248     }
00249   
00250   }
00251 
00252   // Super Clusters
00253   // ... endcap
00254   edm::Handle<reco::SuperClusterCollection> superClusters_EE_h;
00255   ev.getByLabel( superClusterCollection_EE_, superClusters_EE_h );
00256   const reco::SuperClusterCollection* theEndcapSuperClusters = superClusters_EE_h.product () ;
00257   if ( ! superClusters_EE_h.isValid() ) {
00258     edm::LogWarning("EERecoSummary") << "superClusters_EE_h not found"; 
00259   }
00260 
00261   for (reco::SuperClusterCollection::const_iterator itSC = theEndcapSuperClusters->begin(); 
00262        itSC != theEndcapSuperClusters->end(); ++itSC ) {
00263 
00264     double scEt = itSC -> energy() * sin(2.*atan( exp(- itSC->position().eta() )));
00265 
00266     if (scEt < scEtThrEE_ ) continue;
00267 
00268     h_superClusters_eta       -> Fill( itSC -> eta() );
00269     h_superClusters_EE_phi    -> Fill( itSC -> phi() );
00270     
00271     //Now get the seed:
00272     DetId theSeedIdEE = EcalClusterTools::getMaximum( (*itSC).hitsAndFractions(), theEndcapEcalRecHits ).first;
00273     EcalRecHitCollection::const_iterator theSeedEE = theEndcapEcalRecHits->find (theSeedIdEE) ;
00274 
00275     if  ( itSC -> z() > 0 ){
00276       h_superClusters_EEP_nBC    -> Fill( itSC -> clustersSize() );      
00277     }
00278 
00279     if  ( itSC -> z() < 0 ){
00280       h_superClusters_EEM_nBC    -> Fill( itSC -> clustersSize() );      
00281     }
00282   }
00283 
00284   //--------------------------------------------------------
00285  
00286 }
00287 
00288 
00289 // ------------ method called once each job just before starting event loop  ------------
00290 void 
00291 EERecoSummary::beginJob()
00292 {
00293 }
00294 
00295 // ------------ method called once each job just after ending the event loop  ------------
00296 void 
00297 EERecoSummary::endJob() 
00298 {}
00299 
00300 
00301 //define this as a plug-in
00302 DEFINE_FWK_MODULE(EERecoSummary);