CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQMOffline/Muon/src/MuonAnalyzer.cc

Go to the documentation of this file.
00001 
00002 /*
00003  *  See header file for a description of this class.
00004  *
00005  *  $Date: 2011/05/22 18:17:13 $
00006  *  $Revision: 1.24 $
00007  *  \author G. Mila - INFN Torino
00008  */
00009 
00010 #include "DQMOffline/Muon/src/MuonAnalyzer.h"
00011 
00012 #include "DQMOffline/Muon/src/MuonEnergyDepositAnalyzer.h"
00013 #include "DQMOffline/Muon/src/MuonSeedsAnalyzer.h"
00014 #include "DQMOffline/Muon/src/MuonRecoAnalyzer.h"
00015 #include "DQMOffline/Muon/src/SegmentTrackAnalyzer.h"
00016 #include "DQMOffline/Muon/src/MuonKinVsEtaAnalyzer.h"
00017 #include "DQMOffline/Muon/src/DiMuonHistograms.h"
00018 
00019 
00020 #include "FWCore/Framework/interface/Event.h"
00021 #include "FWCore/Framework/interface/EventSetup.h"
00022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00023 
00024 #include "DQMServices/Core/interface/DQMStore.h"
00025 #include "DQMServices/Core/interface/MonitorElement.h"
00026 
00027 #include "DataFormats/Common/interface/Handle.h"
00028 #include "DataFormats/MuonReco/interface/Muon.h"
00029 #include "DataFormats/MuonReco/interface/MuonFwd.h" 
00030 #include "DataFormats/TrackReco/interface/Track.h"
00031 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00032 #include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
00033 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00034 
00035 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
00036 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00037 
00038 #include <string>
00039 using namespace std;
00040 using namespace edm;
00041 
00042 
00043 
00044 MuonAnalyzer::MuonAnalyzer(const edm::ParameterSet& pSet) {
00045 
00046   parameters = pSet;
00047 
00048   // the services
00049   theService = new MuonServiceProxy(parameters.getParameter<ParameterSet>("ServiceParameters"));
00050   
00051   // Muon Collection Label
00052   theMuonCollectionLabel = parameters.getParameter<edm::InputTag>("MuonCollection");
00053   // Glb Muon Collection Label
00054   theGlbMuTrackCollectionLabel = parameters.getParameter<edm::InputTag>("GlobalMuTrackCollection");
00055   // STA Muon Collection Label
00056   theStaMuTrackCollectionLabel = parameters.getParameter<edm::InputTag>("STAMuTrackCollection");
00057   // Seeds Collection Label
00058   theSeedsCollectionLabel = parameters.getParameter<edm::InputTag>("SeedCollection");
00059   
00060   theMuEnergyAnalyzerFlag = parameters.getUntrackedParameter<bool>("DoMuonEnergyAnalysis",true);
00061   theSeedsAnalyzerFlag = parameters.getUntrackedParameter<bool>("DoMuonSeedAnalysis",true);
00062   theMuonRecoAnalyzerFlag = parameters.getUntrackedParameter<bool>("DoMuonRecoAnalysis",true);
00063   theMuonSegmentsAnalyzerFlag = parameters.getUntrackedParameter<bool>("DoTrackSegmentsAnalysis",true);
00064   theMuonKinVsEtaAnalyzerFlag = parameters.getUntrackedParameter<bool>("DoMuonKinVsEtaAnalysis",false);
00065   theDiMuonHistogramsFlag = parameters.getUntrackedParameter<bool>("DoDiMuonHistograms",true);
00066   
00067   // do the analysis on muon energy
00068   if(theMuEnergyAnalyzerFlag)
00069     theMuEnergyAnalyzer = new MuonEnergyDepositAnalyzer(parameters.getParameter<ParameterSet>("muonEnergyAnalysis"), theService);
00070   // do the analysis on seeds
00071   if(theSeedsAnalyzerFlag)
00072     theSeedsAnalyzer = new MuonSeedsAnalyzer(parameters.getParameter<ParameterSet>("seedsAnalysis"), theService);
00073   // do the analysis on muon energy
00074   if(theMuonRecoAnalyzerFlag)
00075     theMuonRecoAnalyzer = new MuonRecoAnalyzer(parameters.getParameter<ParameterSet>("muonRecoAnalysis"), theService);
00076   // do the analysis of kin quantities in eta regions
00077   if(theMuonRecoAnalyzerFlag)
00078     theMuonKinVsEtaAnalyzer = new MuonKinVsEtaAnalyzer(parameters.getParameter<ParameterSet>("muonKinVsEtaAnalysis"), theService);
00079   if(theDiMuonHistogramsFlag)
00080     theDiMuonHistograms = new DiMuonHistograms(parameters.getParameter<ParameterSet>("dimuonHistograms"), theService);
00081   // do the analysis on muon track segments
00082   if(theMuonSegmentsAnalyzerFlag){
00083     // analysis on glb muon tracks
00084     ParameterSet  trackGlbMuAnalysisParameters = parameters.getParameter<ParameterSet>("trackSegmentsAnalysis");
00085     trackGlbMuAnalysisParameters.addParameter<edm::InputTag>("MuTrackCollection",
00086                                                              theGlbMuTrackCollectionLabel);
00087     theGlbMuonSegmentsAnalyzer = new SegmentTrackAnalyzer(trackGlbMuAnalysisParameters, theService);
00088     // analysis on sta muon tracks
00089     ParameterSet  trackStaMuAnalysisParameters = parameters.getParameter<ParameterSet>("trackSegmentsAnalysis");
00090     trackStaMuAnalysisParameters.addParameter<edm::InputTag>("MuTrackCollection",
00091                                                              theStaMuTrackCollectionLabel);
00092     theStaMuonSegmentsAnalyzer = new SegmentTrackAnalyzer(trackStaMuAnalysisParameters, theService);
00093   }
00094 }
00095 
00096 MuonAnalyzer::~MuonAnalyzer() {
00097  
00098   delete theService;
00099   if(theMuEnergyAnalyzerFlag) delete theMuEnergyAnalyzer;
00100   if(theSeedsAnalyzerFlag) delete theSeedsAnalyzer;
00101   if(theMuonRecoAnalyzerFlag) delete theMuonRecoAnalyzer;
00102   if(theMuonSegmentsAnalyzerFlag) {
00103     delete theGlbMuonSegmentsAnalyzer;
00104     delete theStaMuonSegmentsAnalyzer;
00105   }
00106   if(theMuonKinVsEtaAnalyzerFlag) {
00107     delete theMuonKinVsEtaAnalyzer;
00108   }
00109   if(theDiMuonHistogramsFlag) {
00110     delete theDiMuonHistograms;
00111   }
00112 }
00113 
00114 
00115 void MuonAnalyzer::beginJob(void) {
00116 
00117   metname = "muonAnalyzer";
00118 
00119   LogTrace(metname)<<"[MuonAnalyzer] Parameters initialization";
00120   theDbe = edm::Service<DQMStore>().operator->();
00121  
00122   if(theMuEnergyAnalyzerFlag) theMuEnergyAnalyzer->beginJob(theDbe);
00123   if(theSeedsAnalyzerFlag) theSeedsAnalyzer->beginJob(theDbe);
00124   if(theMuonRecoAnalyzerFlag) theMuonRecoAnalyzer->beginJob(theDbe);
00125   if(theMuonSegmentsAnalyzerFlag) {
00126     theGlbMuonSegmentsAnalyzer->beginJob(theDbe);
00127     theStaMuonSegmentsAnalyzer->beginJob(theDbe);
00128   }
00129   if(theMuonKinVsEtaAnalyzerFlag) {
00130     theMuonKinVsEtaAnalyzer->beginJob(theDbe);
00131   }
00132 
00133   if(theDiMuonHistogramsFlag) {
00134     theDiMuonHistograms->beginJob(theDbe);
00135   }
00136 
00137 }
00138 
00139 
00140 void MuonAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
00141 
00142   LogTrace(metname)<<"[MuonAnalyzer] Analysis of event # ";
00143   
00144   theService->update(iSetup);
00145 
00146    // Take the STA muon container
00147    edm::Handle<reco::MuonCollection> muons;
00148    iEvent.getByLabel(theMuonCollectionLabel,muons);
00149 
00150    if(muons.isValid()){
00151      for (reco::MuonCollection::const_iterator recoMu = muons->begin(); recoMu!=muons->end(); ++recoMu){
00152        if(theMuEnergyAnalyzerFlag){
00153          LogTrace(metname)<<"[MuonAnalyzer] Call to the muon energy analyzer";
00154          theMuEnergyAnalyzer->analyze(iEvent, iSetup, *recoMu);
00155        }
00156        if(theMuonRecoAnalyzerFlag){
00157          LogTrace(metname)<<"[MuonAnalyzer] Call to the muon reco analyzer";
00158          theMuonRecoAnalyzer->analyze(iEvent, iSetup, *recoMu);
00159        }
00160        if(theMuonKinVsEtaAnalyzerFlag){
00161          LogTrace(metname)<<"[MuonAnalyzer] Call to the muon KinVsEta analyzer";
00162          theMuonKinVsEtaAnalyzer->analyze(iEvent, iSetup, *recoMu);
00163        }
00164      }
00165      
00166      if (theDiMuonHistogramsFlag){
00167        LogTrace(metname)<<"[MuonAnalyzer] Call to the dimuon analyzer";
00168        theDiMuonHistograms->analyze(iEvent,iSetup);
00169      }
00170    }
00171 
00172    // Take the track containers
00173    Handle<reco::TrackCollection> glbTracks;
00174    iEvent.getByLabel(theGlbMuTrackCollectionLabel,glbTracks);
00175    Handle<reco::TrackCollection> staTracks;
00176    iEvent.getByLabel(theStaMuTrackCollectionLabel,staTracks);
00177 
00178    if(glbTracks.isValid()){
00179      for (reco::TrackCollection::const_iterator recoTrack = glbTracks->begin(); recoTrack!=glbTracks->end(); ++recoTrack){
00180        if(theMuonSegmentsAnalyzerFlag){
00181          LogTrace(metname)<<"[SegmentsAnalyzer] Call to the track segments analyzer for glb muons";
00182          theGlbMuonSegmentsAnalyzer->analyze(iEvent, iSetup, *recoTrack);
00183        }
00184      }
00185    }
00186    if(staTracks.isValid()){
00187      for (reco::TrackCollection::const_iterator recoTrack = staTracks->begin(); recoTrack!=staTracks->end(); ++recoTrack){
00188        if(theMuonSegmentsAnalyzerFlag){
00189          LogTrace(metname)<<"[SegmentsAnalyzer] Call to the track segments analyzer for sta muons";
00190          theStaMuonSegmentsAnalyzer->analyze(iEvent, iSetup, *recoTrack);
00191        }
00192      }
00193    }
00194    
00195    
00196      
00197 
00198    // Take the seeds container
00199    edm::Handle<TrajectorySeedCollection> seeds;
00200    iEvent.getByLabel(theSeedsCollectionLabel, seeds);
00201    if(seeds.isValid()){
00202      for(TrajectorySeedCollection::const_iterator seed = seeds->begin(); seed != seeds->end(); ++seed){
00203        if(theSeedsAnalyzerFlag){
00204          LogTrace(metname)<<"[MuonAnalyzer] Call to the seeds analyzer";
00205          theSeedsAnalyzer->analyze(iEvent, iSetup, *seed);
00206        }
00207      }
00208    }
00209 
00210 }
00211 
00212 
00213 void MuonAnalyzer::endJob(void) {
00214   LogTrace(metname)<<"[MuonAnalyzer] Saving the histos";
00215   bool outputMEsInRootFile = parameters.getParameter<bool>("OutputMEsInRootFile");
00216   std::string outputFileName = parameters.getParameter<std::string>("OutputFileName");
00217   if(outputMEsInRootFile){
00218     theDbe->showDirStructure();
00219     theDbe->save(outputFileName);
00220   }
00221 }
00222