Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
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
00049 theService = new MuonServiceProxy(parameters.getParameter<ParameterSet>("ServiceParameters"));
00050
00051
00052 theMuonCollectionLabel = parameters.getParameter<edm::InputTag>("MuonCollection");
00053
00054 theGlbMuTrackCollectionLabel = parameters.getParameter<edm::InputTag>("GlobalMuTrackCollection");
00055
00056 theStaMuTrackCollectionLabel = parameters.getParameter<edm::InputTag>("STAMuTrackCollection");
00057
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
00068 if(theMuEnergyAnalyzerFlag)
00069 theMuEnergyAnalyzer = new MuonEnergyDepositAnalyzer(parameters.getParameter<ParameterSet>("muonEnergyAnalysis"), theService);
00070
00071 if(theSeedsAnalyzerFlag)
00072 theSeedsAnalyzer = new MuonSeedsAnalyzer(parameters.getParameter<ParameterSet>("seedsAnalysis"), theService);
00073
00074 if(theMuonRecoAnalyzerFlag)
00075 theMuonRecoAnalyzer = new MuonRecoAnalyzer(parameters.getParameter<ParameterSet>("muonRecoAnalysis"), theService);
00076
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
00082 if(theMuonSegmentsAnalyzerFlag){
00083
00084 ParameterSet trackGlbMuAnalysisParameters = parameters.getParameter<ParameterSet>("trackSegmentsAnalysis");
00085 trackGlbMuAnalysisParameters.addParameter<edm::InputTag>("MuTrackCollection",
00086 theGlbMuTrackCollectionLabel);
00087 theGlbMuonSegmentsAnalyzer = new SegmentTrackAnalyzer(trackGlbMuAnalysisParameters, theService);
00088
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
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
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
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