00001 #include "Validation/RecoMET/interface/METTester.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "FWCore/PluginManager/interface/ModuleDef.h"
00022 #include "FWCore/Framework/interface/MakerMacros.h"
00023
00024 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00025 #include "FWCore/ServiceRegistry/interface/Service.h"
00026
00027 #include "FWCore/Framework/interface/Event.h"
00028 #include "DataFormats/Common/interface/Handle.h"
00029 #include "FWCore/Framework/interface/ESHandle.h"
00030
00031 #include "DataFormats/METReco/interface/CaloMET.h"
00032 #include "DataFormats/METReco/interface/CaloMETCollection.h"
00033 #include "DataFormats/METReco/interface/GenMET.h"
00034 #include "DataFormats/METReco/interface/GenMETCollection.h"
00035 #include "DataFormats/METReco/interface/MET.h"
00036 #include "DataFormats/METReco/interface/METFwd.h"
00037 #include "DataFormats/METReco/interface/PFMET.h"
00038 #include "DataFormats/METReco/interface/PFMETCollection.h"
00039 #include "DataFormats/MuonReco/interface/MuonMETCorrectionData.h"
00040 #include "DataFormats/Common/interface/ValueMap.h"
00041 #include "DataFormats/MuonReco/interface/Muon.h"
00042 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00043 #include "DataFormats/MuonReco/interface/MuonMETCorrectionData.h"
00044 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00045 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00046 #include "DataFormats/TrackReco/interface/Track.h"
00047
00048 #include <vector>
00049 #include <utility>
00050 #include <ostream>
00051 #include <fstream>
00052 #include <iostream>
00053 #include <algorithm>
00054 #include <cmath>
00055 #include <memory>
00056 #include "DQMServices/Core/interface/DQMStore.h"
00057 #include "TMath.h"
00058
00059 METTester::METTester(const edm::ParameterSet& iConfig)
00060 {
00061 METType_ = iConfig.getUntrackedParameter<std::string>("METType");
00062 inputMETLabel_ = iConfig.getParameter<edm::InputTag>("InputMETLabel");
00063 if(METType_ == "TCMET") {
00064 inputCaloMETLabel_ = iConfig.getParameter<edm::InputTag>("InputCaloMETLabel");
00065 inputTrackLabel_ = iConfig.getParameter<edm::InputTag>("InputTrackLabel");
00066 inputMuonLabel_ = iConfig.getParameter<edm::InputTag>("InputMuonLabel");
00067 inputElectronLabel_ = iConfig.getParameter<edm::InputTag>("InputElectronLabel");
00068 inputBeamSpotLabel_ = iConfig.getParameter<edm::InputTag>("InputBeamSpotLabel");
00069 minhits_ = iConfig.getParameter<int>("minhits");
00070 maxd0_ = iConfig.getParameter<double>("maxd0");
00071 maxchi2_ = iConfig.getParameter<double>("maxchi2");
00072 maxeta_ = iConfig.getParameter<double>("maxeta");
00073 maxpt_ = iConfig.getParameter<double>("maxpt");
00074 maxPtErr_ = iConfig.getParameter<double>("maxPtErr");
00075 trkQuality_ = iConfig.getParameter<std::vector<int> >("trkQuality");
00076 trkAlgos_ = iConfig.getParameter<std::vector<int> >("trkAlgos");
00077 sample_ = iConfig.getUntrackedParameter<std::string>("sample");
00078 }
00079 finebinning_ = iConfig.getUntrackedParameter<bool>("FineBinning");
00080 FolderName_ = iConfig.getUntrackedParameter<std::string>("FolderName");
00081 }
00082
00083
00084 void METTester::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup)
00085 {
00086
00087 dbe_ = edm::Service<DQMStore>().operator->();
00088
00089 if (dbe_) {
00090
00091
00092
00093 TString dirName(FolderName_.c_str());
00094 TString label(inputMETLabel_.label());
00095 dirName += label;
00096 dbe_->setCurrentFolder((std::string)dirName);
00097
00098 if (METType_ == "CaloMET")
00099 {
00100
00101 if(!finebinning_)
00102 {
00103 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,-0.5,1);
00104 me["hCaloMEx"] = dbe_->book1D("METTask_CaloMEx","METTask_CaloMEx",500,-999.5,499.5);
00105 me["hCaloMEy"] = dbe_->book1D("METTask_CaloMEy","METTask_CaloMEy",500,-999.5,499.5);
00106
00107 me["hCaloMETSig"] = dbe_->book1D("METTask_CaloMETSig","METTask_CaloMETSig",25,-0.5,24.5);
00108 me["hCaloMET"] = dbe_->book1D("METTask_CaloMET","METTask_CaloMET",1000,-0.5,1999.5);
00109 me["hCaloMETPhi"] = dbe_->book1D("METTask_CaloMETPhi","METTask_CaloMETPhi",40,-4,4);
00110 me["hCaloSumET"] = dbe_->book1D("METTask_CaloSumET","METTask_CaloSumET",800,-0.5,7999.5);
00111 me["hCaloMaxEtInEmTowers"] = dbe_->book1D("METTask_CaloMaxEtInEmTowers","METTask_CaloMaxEtInEmTowers",600,-0.5,2999.5);
00112 me["hCaloMaxEtInHadTowers"] = dbe_->book1D("METTask_CaloMaxEtInHadTowers","METTask_CaloMaxEtInHadTowers",600,-.05,2999.5);
00113 me["hCaloEtFractionHadronic"] = dbe_->book1D("METTask_CaloEtFractionHadronic","METTask_CaloEtFractionHadronic",100,0,1);
00114 me["hCaloEmEtFraction"] = dbe_->book1D("METTask_CaloEmEtFraction","METTask_CaloEmEtFraction",100,0,1);
00115 me["hCaloHadEtInHB"] = dbe_->book1D("METTask_CaloHadEtInHB","METTask_CaloHadEtInHB",1000, -0.5, 4999.5);
00116 me["hCaloHadEtInHO"] = dbe_->book1D("METTask_CaloHadEtInHO","METTask_CaloHadEtInHO",250, -0.5, 499.5);
00117 me["hCaloHadEtInHE"] = dbe_->book1D("METTask_CaloHadEtInHE","METTask_CaloHadEtInHE",200, -0.5, 399.5);
00118 me["hCaloHadEtInHF"] = dbe_->book1D("METTask_CaloHadEtInHF","METTask_CaloHadEtInHF",100, -0.5, 199.5);
00119 me["hCaloEmEtInHF"] = dbe_->book1D("METTask_CaloEmEtInHF","METTask_CaloEmEtInHF",100, -0.5, 99.5);
00120 me["hCaloEmEtInEE"] = dbe_->book1D("METTask_CaloEmEtInEE","METTask_CaloEmEtInEE",100,0,199.5);
00121 me["hCaloEmEtInEB"] = dbe_->book1D("METTask_CaloEmEtInEB","METTask_CaloEmEtInEB",1200,0, 5999.5);
00122
00123
00124
00125 me["hCaloMETResolution_GenMETTrue"] = dbe_->book1D("METTask_CaloMETResolution_GenMETTrue","METTask_CaloMETResolution_GenMETTrue", 500,-500,500);
00126 me["hCaloMETResolution_GenMETCalo"] = dbe_->book1D("METTask_CaloMETResolution_GenMETCalo","METTask_CaloMETResolution_GenMETCalo", 500,-500,500);
00127
00128 me["hCaloMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_CaloMETPhiResolution_GenMETTrue","METTask_CaloMETPhiResolution_GenMETTrue", 80,0,4);
00129 me["hCaloMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_CaloMETPhiResolution_GenMETCalo","METTask_CaloMETPhiResolution_GenMETCalo", 80,0,4);
00130
00131 }
00132 else
00133 {
00134
00135 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,-0.5,1);
00136 me["hCaloMEx"] = dbe_->book1D("METTask_CaloMEx","METTask_CaloMEx",4001,-1000,1001);
00137 me["hCaloMEy"] = dbe_->book1D("METTask_CaloMEy","METTask_CaloMEy",4001,-1000,1001);
00138
00139 me["hCaloMETSig"] = dbe_->book1D("METTask_CaloMETSig","METTask_CaloMETSig",51,0,51);
00140 me["hCaloMET"] = dbe_->book1D("METTask_CaloMET","METTask_CaloMET",2001,0,2001);
00141 me["hCaloMETPhi"] = dbe_->book1D("METTask_CaloMETPhi","METTask_CaloMETPhi",40,-4,4);
00142 me["hCaloSumET"] = dbe_->book1D("METTask_CaloSumET","METTask_CaloSumET",10001,0,10001);
00143 me["hCaloMaxEtInEmTowers"] = dbe_->book1D("METTask_CaloMaxEtInEmTowers","METTask_CaloMaxEtInEmTowers",4001,0,4001);
00144 me["hCaloMaxEtInHadTowers"] = dbe_->book1D("METTask_CaloMaxEtInHadTowers","METTask_CaloMaxEtInHadTowers",4001,0,4001);
00145 me["hCaloEtFractionHadronic"] = dbe_->book1D("METTask_CaloEtFractionHadronic","METTask_CaloEtFractionHadronic",100,0,1);
00146 me["hCaloEmEtFraction"] = dbe_->book1D("METTask_CaloEmEtFraction","METTask_CaloEmEtFraction",100,0,1);
00147 me["hCaloHadEtInHB"] = dbe_->book1D("METTask_CaloHadEtInHB","METTask_CaloHadEtInHB",8001,0,8001);
00148 me["hCaloHadEtInHO"] = dbe_->book1D("METTask_CaloHadEtInHO","METTask_CaloHadEtInHO",4001,0,4001);
00149 me["hCaloHadEtInHE"] = dbe_->book1D("METTask_CaloHadEtInHE","METTask_CaloHadEtInHE",4001,0,4001);
00150 me["hCaloHadEtInHF"] = dbe_->book1D("METTask_CaloHadEtInHF","METTask_CaloHadEtInHF",4001,0,4001);
00151 me["hCaloHadEtInEB"] = dbe_->book1D("METTask_CaloHadEtInEB","METTask_CaloHadEtInEB",8001,0,8001);
00152 me["hCaloHadEtInEE"] = dbe_->book1D("METTask_CaloHadEtInEE","METTask_CaloHadEtInEE",4001,0,4001);
00153 me["hCaloEmEtInHF"] = dbe_->book1D("METTask_CaloEmEtInHF","METTask_CaloEmEtInHF",4001,0,4001);
00154 me["hCaloEmEtInEE"] = dbe_->book1D("METTask_CaloEmEtInEE","METTask_CaloEmEtInEE",4001,0,4001);
00155 me["hCaloEmEtInEB"] = dbe_->book1D("METTask_CaloEmEtInEB","METTask_CaloEmEtInEB",8001,0,8001);
00156
00157 me["hCaloMETResolution_GenMETTrue"] = dbe_->book1D("METTask_CaloMETResolution_GenMETTrue","METTask_CaloMETResolution_GenMETTrue", 2000,-1000,1000);
00158 me["hCaloMETResolution_GenMETCalo"] = dbe_->book1D("METTask_CaloMETResolution_GenMETCalo","METTask_CaloMETResolution_GenMETCalo", 2000,-1000,1000);
00159
00160 me["hCaloMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_CaloMETPhiResolution_GenMETTrue","METTask_CaloMETPhiResolution_GenMETTrue", 80,0,4);
00161 me["hCaloMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_CaloMETPhiResolution_GenMETCalo","METTask_CaloMETPhiResolution_GenMETCalo", 80,0,4);
00162 }
00163 }
00164
00165 else if (METType_ == "GenMET")
00166 {
00167
00168
00169 if(!finebinning_)
00170 {
00171 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00172 me["hGenMEx"] = dbe_->book1D("METTask_GenMEx","METTask_GenMEx",1000,-999.5,999.5);
00173 me["hGenMEy"] = dbe_->book1D("METTask_GenMEy","METTask_GenMEy",1000,-999.5,999.5);
00174
00175 me["hGenMETSig"] = dbe_->book1D("METTask_GenMETSig","METTask_GenMETSig",51,0,51);
00176 me["hGenMET"] = dbe_->book1D("METTask_GenMET","METTask_GenMET", 2000,-0.5,1999.5);
00177 me["hGenMETPhi"] = dbe_->book1D("METTask_GenMETPhi","METTask_GenMETPhi",40,-4,4);
00178 me["hGenSumET"] = dbe_->book1D("METTask_GenSumET","METTask_GenSumET",1000,-0.5,9999.5);
00179
00180 me["hNeutralEMEtFraction"] = dbe_->book1D("METTask_GenNeutralEMEtFraction", "METTask_GenNeutralEMEtFraction", 120, 0.0, 1.2 );
00181 me["hNeutralHadEtFraction"] = dbe_->book1D("METTask_GenNeutralHadEtFraction", "METTask_GenNeutralHadEtFraction", 120, 0.0, 1.2 );
00182 me["hChargedEMEtFraction"] = dbe_->book1D("METTask_GenChargedEMEtFraction", "METTask_GenChargedEMEtFraction", 120, 0.0, 1.2);
00183 me["hChargedHadEtFraction"] = dbe_->book1D("METTask_GenChargedHadEtFraction", "METTask_GenChargedHadEtFraction", 120, 0.0,1.2);
00184 me["hMuonEtFraction"] = dbe_->book1D("METTask_GenMuonEtFraction", "METTask_GenMuonEtFraction", 120, 0.0, 1.2 );
00185 me["hInvisibleEtFraction"] = dbe_->book1D("METTask_GenInvisibleEtFraction", "METTask_GenInvisibleEtFraction", 120, 0.0, 1.2 );
00186
00187 }
00188 else
00189 {
00190 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00191 me["hGenMEx"] = dbe_->book1D("METTask_GenMEx","METTask_GenMEx",4001,-1000,1001);
00192 me["hGenMEy"] = dbe_->book1D("METTask_GenMEy","METTask_GenMEy",4001,-1000,1001);
00193
00194 me["hGenMETSig"] = dbe_->book1D("METTask_GenMETSig","METTask_GenMETSig",51,0,51);
00195 me["hGenMET"] = dbe_->book1D("METTask_GenMET","METTask_GenMET",2001,0,2001);
00196 me["hGenMETPhi"] = dbe_->book1D("METTask_GenMETPhi","METTask_GenMETPhi",40,-4,4);
00197 me["hGenSumET"] = dbe_->book1D("METTask_GenSumET","METTask_GenSumET",10001,0,10001);
00198 me["hNeutralEMEtFraction"] = dbe_->book1D("METTask_GenNeutralEMEtFraction", "METTask_GenNeutralEMEtFraction", 120, 0.0, 1.2 );
00199 me["hNeutralHadEtFraction"] = dbe_->book1D("METTask_GenNeutralHadEtFraction", "METTask_GenNeutralHadEtFraction", 120, 0.0, 1.2 );
00200 me["hChargedEMEtFraction"] = dbe_->book1D("METTask_GenChargedEMEtFraction", "METTask_GenChargedEMEtFraction", 120, 0.0, 1.2);
00201 me["hChargedHadEtFraction"] = dbe_->book1D("METTask_GenChargedHadEtFraction", "METTask_GenChargedHadEtFraction", 120, 0.0,1.2);
00202 me["hMuonEtFraction"] = dbe_->book1D("METTask_GenMuonEtFraction", "METTask_GenMuonEtFraction", 120, 0.0, 1.2 );
00203 me["hInvisibleEtFraction"] = dbe_->book1D("METTask_GenInvisibleEtFraction", "METTask_GenInvisibleEtFraction", 120, 0.0, 1.2 );
00204
00205 }
00206 }
00207 else if (METType_ == "MET")
00208 {
00209
00210 if(!finebinning_)
00211 {
00212 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00213 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",1000,-999.5,999.5);
00214 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",1000,-999.5,999.5);
00215
00216 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",50,-0.5,49.5);
00217 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",1000,-0.5,1999.5);
00218 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00219 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",1000,0,9999.5);
00220
00221 }
00222 else
00223 {
00224 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00225 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",2001,-500,501);
00226 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",2001,-500,501);
00227
00228 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",51,0,51);
00229 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",2001,0,2001);
00230 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00231 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",4001,0,4001);
00232
00233 }
00234 }
00235 else if (METType_ == "PFMET")
00236 {
00237
00238 if(!finebinning_)
00239 {
00240 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00241 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",1000,-999.5,999.5);
00242 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",1000,-999.5,999.5);
00243
00244 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",51,0,51);
00245 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",1000,-0.5,1999.5);
00246 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00247 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",1000,-0.50,9999.5);
00248
00249 me["hMETResolution_GenMETTrue"] = dbe_->book1D("METTask_METResolution_GenMETTrue","METTask_METResolution_GenMETTrue", 500,-500,500);
00250 me["hMETResolution_GenMETCalo"] = dbe_->book1D("METTask_METResolution_GenMETCalo","METTask_METResolution_GenMETCalo", 500,-500,500);
00251
00252 me["hMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_METPhiResolution_GenMETTrue","METTask_METPhiResolution_GenMETTrue", 80,0,4);
00253 me["hMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_METPhiResolution_GenMETCalo","METTask_METPhiResolution_GenMETCalo", 80,0,4);
00254
00255 }
00256 else
00257 {
00258
00259 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00260 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",2001,-500,501);
00261 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",2001,-500,501);
00262
00263 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",51,0,51);
00264 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",2001,0,2001);
00265 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00266 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",4001,0,4001);
00267
00268 me["hMETResolution_GenMETTrue"] = dbe_->book1D("METTask_METResolution_GenMETTrue","METTask_METResolution_GenMETTrue",2000,-1000,1000);
00269 me["hMETResolution_GenMETCalo"] = dbe_->book1D("METTask_METResolution_GenMETCalo","METTask_METResolution_GenMETCalo",2000,-1000,1000);
00270
00271 me["hMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_METPhiResolution_GenMETTrue","METTask_METPhiResolution_GenMETTrue", 80,0,4);
00272 me["hMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_METPhiResolution_GenMETCalo","METTask_METPhiResolution_GenMETCalo", 80,0,4);
00273
00274
00275 }
00276 }
00277 else if (METType_ == "TCMET" || inputMETLabel_.label() == "corMetGlobalMuons")
00278 {
00279
00280 if(!finebinning_)
00281 {
00282 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00283 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",1000,-999.5,999.5);
00284 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",1000,-999.5,999.5);
00285 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",51,0,51);
00286 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",1000,-0.5,1999.5);
00287 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00288 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",1000,-0.50,9999.5);
00289
00290 me["hMExCorrection"] = dbe_->book1D("METTask_MExCorrection","METTask_MExCorrection", 1000, -500.0,500.0);
00291 me["hMEyCorrection"] = dbe_->book1D("METTask_MEyCorrection","METTask_MEyCorrection", 1000, -500.0,500.0);
00292 me["hMuonCorrectionFlag"] = dbe_->book1D("METTask_CorrectionFlag", "METTask_CorrectionFlag", 6, -0.5, 5.5);
00293
00294 me["hMETResolution_GenMETTrue"] = dbe_->book1D("METTask_METResolution_GenMETTrue","METTask_METResolution_GenMETTrue", 500,-500,500);
00295 me["hMETResolution_GenMETCalo"] = dbe_->book1D("METTask_METResolution_GenMETCalo","METTask_METResolution_GenMETCalo", 500,-500,500);
00296
00297 me["hMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_METPhiResolution_GenMETTrue","METTask_METPhiResolution_GenMETTrue", 80,0,4);
00298 me["hMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_METPhiResolution_GenMETCalo","METTask_METPhiResolution_GenMETCalo", 80,0,4);
00299
00300 if( METType_ == "TCMET" ) {
00301 me["htrkPt"] = dbe_->book1D("METTask_trackPt", "METTask_trackPt", 50, 0, 500);
00302 me["htrkEta"] = dbe_->book1D("METTask_trackEta", "METTask_trackEta", 50, -2.5, 2.5);
00303 me["htrkNhits"] = dbe_->book1D("METTask_trackNhits", "METTask_trackNhits", 50, 0, 50);
00304 me["htrkChi2"] = dbe_->book1D("METTask_trackNormalizedChi2", "METTask_trackNormalizedChi2", 20, 0, 20);
00305 me["htrkD0"] = dbe_->book1D("METTask_trackD0", "METTask_trackd0", 50, -1, 1);
00306 me["htrkQuality"] = dbe_->book1D("METTask_trackQuality", "METTask_trackQuality", 30, -0.5, 29.5);
00307 me["htrkAlgo"] = dbe_->book1D("METTask_trackAlgo", "METTask_trackAlgo", 6, 3.5, 9.5);
00308 me["htrkPtErr"] = dbe_->book1D("METTask_trackPtErr", "METTask_trackPtErr", 200, 0, 2);
00309 me["helePt"] = dbe_->book1D("METTask_electronPt", "METTask_electronPt", 50, 0, 500);
00310 me["heleEta"] = dbe_->book1D("METTask_electronEta", "METTask_electronEta", 50, -2.5, 2.5);
00311 me["heleHoE"] = dbe_->book1D("METTask_electronHoverE", "METTask_electronHoverE", 25, 0, 0.5);
00312 me["hmuPt"] = dbe_->book1D("METTask_muonPt", "METTask_muonPt", 50, 0, 500);
00313 me["hmuEta"] = dbe_->book1D("METTask_muonEta", "METTask_muonEta", 50, -2.5, 2.5);
00314 me["hmuNhits"] = dbe_->book1D("METTask_muonNhits", "METTask_muonNhits", 50, 0, 50);
00315 me["hmuChi2"] = dbe_->book1D("METTask_muonNormalizedChi2", "METTask_muonNormalizedChi2", 20, 0, 20);
00316 me["hmuD0"] = dbe_->book1D("METTask_muonD0", "METTask_muonD0", 50, -1, 1);
00317 me["hnMus"] = dbe_->book1D("METTask_nMus", "METTask_nMus", 5, -0.5, 4.5);
00318 me["hnMusPis"] = dbe_->book1D("METTask_nMusAsPis", "METTask_nMusAsPis", 5, -0.5, 4.5);
00319 me["hmuSAhits"] = dbe_->book1D("METTask_muonSAhits", "METTask_muonSAhits", 51, -0.5, 50.5);
00320 me["hnEls"] = dbe_->book1D("METTask_nEls", "METTask_nEls", 5, -0.5, 4.5);
00321 me["hfracTrks"] = dbe_->book1D("METTask_fracTracks", "METTask_fracTracks", 100, 0, 1);
00322 me["hdMETx"] = dbe_->book1D("METTask_dMETx", "METTask_dMETx", 500, -250, 250);
00323 me["hdMETy"] = dbe_->book1D("METTask_dMETy", "METTask_dMETy", 500, -250, 250);
00324 me["hdMET"] = dbe_->book1D("METTask_dMET", "METTask_dMET", 500, -250, 250);
00325 me["hdMUx"] = dbe_->book1D("METTask_dMUx", "METTask_dMUx", 500, -250, 250);
00326 me["hdMUy"] = dbe_->book1D("METTask_dMUy", "METTask_dMUy", 500, -250, 250);
00327 }
00328 else if( inputMETLabel_.label() == "corMetGlobalMuons" ) {
00329 me["hmuPt"] = dbe_->book1D("METTask_muonPt", "METTask_muonPt", 50, 0, 500);
00330 me["hmuEta"] = dbe_->book1D("METTask_muonEta", "METTask_muonEta", 50, -2.5, 2.5);
00331 me["hmuNhits"] = dbe_->book1D("METTask_muonNhits", "METTask_muonNhits", 50, 0, 50);
00332 me["hmuChi2"] = dbe_->book1D("METTask_muonNormalizedChi2", "METTask_muonNormalizedChi2", 20, 0, 20);
00333 me["hmuD0"] = dbe_->book1D("METTask_muonD0", "METTask_muonD0", 50, -1, 1);
00334 me["hmuSAhits"] = dbe_->book1D("METTask_muonSAhits", "METTask_muonSAhits", 51, -0.5, 50.5);
00335 }
00336 }
00337 else
00338 {
00339
00340 me["hNevents"] = dbe_->book1D("METTask_Nevents","METTask_Nevents",1,0,1);
00341 me["hMEx"] = dbe_->book1D("METTask_MEx","METTask_MEx",2001,-500,501);
00342 me["hMEy"] = dbe_->book1D("METTask_MEy","METTask_MEy",2001,-500,501);
00343 me["hMETSig"] = dbe_->book1D("METTask_METSig","METTask_METSig",51,0,51);
00344 me["hMET"] = dbe_->book1D("METTask_MET","METTask_MET",2001,0,2001);
00345 me["hMETPhi"] = dbe_->book1D("METTask_METPhi","METTask_METPhi",40,-4,4);
00346 me["hSumET"] = dbe_->book1D("METTask_SumET","METTask_SumET",4001,0,4001);
00347 me["hMExCorrection"] = dbe_->book1D("METTask_MExCorrection","METTask_MExCorrection", 2000, -500.0,500.0);
00348 me["hMEyCorrection"] = dbe_->book1D("METTask_MEyCorrection","METTask_MEyCorrection", 2000, -500.0,500.0);
00349 me["hMuonCorrectionFlag"] = dbe_->book1D("METTask_CorrectionFlag", "METTask_CorrectionFlag", 6, -0.5, 5.5);
00350
00351 me["hMETResolution_GenMETTrue"] = dbe_->book1D("METTask_METResolution_GenMETTrue","METTask_METResolution_GenMETTrue",2000,-1000,1000);
00352 me["hMETResolution_GenMETCalo"] = dbe_->book1D("METTask_METResolution_GenMETCalo","METTask_METResolution_GenMETCalo",2000,-1000,1000);
00353
00354 me["hMETPhiResolution_GenMETTrue"] = dbe_->book1D("METTask_METPhiResolution_GenMETTrue","METTask_METPhiResolution_GenMETTrue", 80,0,4);
00355 me["hMETPhiResolution_GenMETCalo"] = dbe_->book1D("METTask_METPhiResolution_GenMETCalo","METTask_METPhiResolution_GenMETCalo", 80,0,4);
00356
00357 if( METType_ == "TCMET" ) {
00358 me["htrkPt"] = dbe_->book1D("METTask_trackPt", "METTask_trackPt", 250, 0, 500);
00359 me["htrkEta"] = dbe_->book1D("METTask_trackEta", "METTask_trackEta", 250, -2.5, 2.5);
00360 me["htrkNhits"] = dbe_->book1D("METTask_trackNhits", "METTask_trackNhits", 50, 0, 50);
00361 me["htrkChi2"] = dbe_->book1D("METTask_trackNormalizedChi2", "METTask_trackNormalizedChi2", 100, 0, 20);
00362 me["htrkD0"] = dbe_->book1D("METTask_trackD0", "METTask_trackd0", 200, -1, 1);
00363 me["htrkQuality"] = dbe_->book1D("METTask_trackQuality", "METTask_trackQuality", 30, -0.5, 29.5);
00364 me["htrkAlgo"] = dbe_->book1D("METTask_trackAlgo", "METTask_trackAlgo", 6, 3.5, 9.5);
00365 me["htrkPtErr"] = dbe_->book1D("METTask_trackPtErr", "METTask_trackPtErr", 200, 0, 2);
00366 me["helePt"] = dbe_->book1D("METTask_electronPt", "METTask_electronPt", 250, 0, 500);
00367 me["heleEta"] = dbe_->book1D("METTask_electronEta", "METTask_electronEta", 250, -2.5, 2.5);
00368 me["heleHoE"] = dbe_->book1D("METTask_electronHoverE", "METTask_electronHoverE", 100, 0, 0.5);
00369 me["hmuPt"] = dbe_->book1D("METTask_muonPt", "METTask_muonPt", 250, 0, 500);
00370 me["hmuEta"] = dbe_->book1D("METTask_muonEta", "METTask_muonEta", 250, -2.5, 2.5);
00371 me["hmuNhits"] = dbe_->book1D("METTask_muonNhits", "METTask_muonNhits", 50, 0, 50);
00372 me["hmuChi2"] = dbe_->book1D("METTask_muonNormalizedChi2", "METTask_muonNormalizedChi2", 100, 0, 20);
00373 me["hmuD0"] = dbe_->book1D("METTask_muonD0", "METTask_muonD0", 200, -1, 1);
00374 me["hnMus"] = dbe_->book1D("METTask_nMus", "METTask_nMus", 5, -0.5, 4.5);
00375 me["hnMusPis"] = dbe_->book1D("METTask_nMusAsPis", "METTask_nMusAsPis", 5, -0.5, 4.5);
00376 me["hmuSAhits"] = dbe_->book1D("METTask_muonSAhits", "METTask_muonSAhits", 51, -0.5, 50.5);
00377 me["hnEls"] = dbe_->book1D("METTask_nEls", "METTask_nEls", 5, -0.5, 4.5);
00378 me["hfracTrks"] = dbe_->book1D("METTask_fracTracks", "METTask_fracTracks", 100, 0, 1);
00379 me["hdMETx"] = dbe_->book1D("METTask_dMETx", "METTask_dMETx", 500, -250, 250);
00380 me["hdMETy"] = dbe_->book1D("METTask_dMETy", "METTask_dMETy", 500, -250, 250);
00381 me["hdMET"] = dbe_->book1D("METTask_dMET", "METTask_dMET", 500, -250, 250);
00382 me["hdMUx"] = dbe_->book1D("METTask_dMUx", "METTask_dMUx", 500, -250, 250);
00383 me["hdMUy"] = dbe_->book1D("METTask_dMUy", "METTask_dMUy", 500, -250, 250);
00384 }
00385 else if( inputMETLabel_.label() == "corMetGlobalMuons" ) {
00386 me["hmuPt"] = dbe_->book1D("METTask_muonPt", "METTask_muonPt", 250, 0, 500);
00387 me["hmuEta"] = dbe_->book1D("METTask_muonEta", "METTask_muonEta", 250, -2.5, 2.5);
00388 me["hmuNhits"] = dbe_->book1D("METTask_muonNhits", "METTask_muonNhits", 50, 0, 50);
00389 me["hmuChi2"] = dbe_->book1D("METTask_muonNormalizedChi2", "METTask_muonNormalizedChi2", 100, 0, 20);
00390 me["hmuD0"] = dbe_->book1D("METTask_muonD0", "METTask_muonD0", 200, -1, 1);
00391 me["hmuSAhits"] = dbe_->book1D("METTask_muonSAhits", "METTask_muonSAhits", 51, -0.5, 50.5);
00392 }
00393 }
00394
00395 if(METType_ == "TCMET")
00396 {
00397 me["hMuonCorrectionFlag"]->setBinLabel(1,"Not Corrected");
00398 me["hMuonCorrectionFlag"]->setBinLabel(2,"Global Fit");
00399 me["hMuonCorrectionFlag"]->setBinLabel(3,"Tracker Fit");
00400 me["hMuonCorrectionFlag"]->setBinLabel(4,"SA Fit");
00401 me["hMuonCorrectionFlag"]->setBinLabel(5,"Treated as Pion");
00402 me["hMuonCorrectionFlag"]->setBinLabel(6,"Default fit");
00403 }
00404 else if( inputMETLabel_.label() == "corMetGlobalMuons")
00405 {
00406 me["hMuonCorrectionFlag"]->setBinLabel(1,"Not Corrected");
00407 me["hMuonCorrectionFlag"]->setBinLabel(2,"Global Fit");
00408 me["hMuonCorrectionFlag"]->setBinLabel(3,"Tracker Fit");
00409 me["hMuonCorrectionFlag"]->setBinLabel(4,"SA Fit");
00410 me["hMuonCorrectionFlag"]->setBinLabel(5,"Treated as Pion");
00411 me["hMuonCorrectionFlag"]->setBinLabel(6,"Default fit");
00412 }
00413 }
00414 else
00415 {
00416 edm::LogInfo("OutputInfo") << " METType not correctly specified!'";
00417 }
00418 }
00419 }
00420
00421 void METTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00422 {
00423 using namespace reco;
00424 if (METType_ == "CaloMET")
00425 {
00426 const CaloMET *calomet;
00427
00428 edm::Handle<CaloMETCollection> calo;
00429 iEvent.getByLabel(inputMETLabel_, calo);
00430 if (!calo.isValid()) {
00431 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task";
00432 edm::LogInfo("OutputInfo") << " MET Task cannot continue...!";
00433 return;
00434 } else {
00435 const CaloMETCollection *calometcol = calo.product();
00436 calomet = &(calometcol->front());
00437 }
00438
00439
00440
00441
00442 double caloSumET = calomet->sumEt();
00443 double caloMETSig = calomet->mEtSig();
00444 double caloMET = calomet->pt();
00445 double caloMEx = calomet->px();
00446 double caloMEy = calomet->py();
00447 double caloMETPhi = calomet->phi();
00448 double caloMaxEtInEMTowers = calomet->maxEtInEmTowers();
00449 double caloMaxEtInHadTowers = calomet->maxEtInHadTowers();
00450 double caloEtFractionHadronic = calomet->etFractionHadronic();
00451 double caloEmEtFraction = calomet->emEtFraction();
00452 double caloHadEtInHB = calomet->hadEtInHB();
00453 double caloHadEtInHO = calomet->hadEtInHO();
00454 double caloHadEtInHE = calomet->hadEtInHE();
00455 double caloHadEtInHF = calomet->hadEtInHF();
00456 double caloEmEtInEB = calomet->emEtInEB();
00457 double caloEmEtInEE = calomet->emEtInEE();
00458 double caloEmEtInHF = calomet->emEtInHF();
00459
00460 edm::LogInfo("OutputInfo") << caloMET << " " << caloSumET << std::endl;
00461 me["hNevents"]->Fill(0.5);
00462 me["hCaloMEx"]->Fill(caloMEx);
00463 me["hCaloMEy"]->Fill(caloMEy);
00464 me["hCaloMET"]->Fill(caloMET);
00465 me["hCaloMETPhi"]->Fill(caloMETPhi);
00466 me["hCaloSumET"]->Fill(caloSumET);
00467 me["hCaloMETSig"]->Fill(caloMETSig);
00468 me["hCaloMaxEtInEmTowers"]->Fill(caloMaxEtInEMTowers);
00469 me["hCaloMaxEtInHadTowers"]->Fill(caloMaxEtInHadTowers);
00470 me["hCaloEtFractionHadronic"]->Fill(caloEtFractionHadronic);
00471 me["hCaloEmEtFraction"]->Fill(caloEmEtFraction);
00472 me["hCaloHadEtInHB"]->Fill(caloHadEtInHB);
00473 me["hCaloHadEtInHO"]->Fill(caloHadEtInHO);
00474 me["hCaloHadEtInHE"]->Fill(caloHadEtInHE);
00475 me["hCaloHadEtInHF"]->Fill(caloHadEtInHF);
00476 me["hCaloEmEtInEB"]->Fill(caloEmEtInEB);
00477 me["hCaloEmEtInEE"]->Fill(caloEmEtInEE);
00478 me["hCaloEmEtInHF"]->Fill(caloEmEtInHF);
00479
00480
00481
00482
00483 edm::Handle<GenMETCollection> genTrue;
00484 iEvent.getByLabel("genMetTrue", genTrue);
00485 if (genTrue.isValid()) {
00486 const GenMETCollection *genmetcol = genTrue.product();
00487 const GenMET *genMetTrue = &(genmetcol->front());
00488 double genMET = genMetTrue->pt();
00489 double genMETPhi = genMetTrue->phi();
00490
00491 me["hCaloMETResolution_GenMETTrue"]->Fill( caloMET - genMET );
00492 me["hCaloMETPhiResolution_GenMETTrue"]->Fill( TMath::ACos( TMath::Cos( caloMETPhi - genMETPhi ) ) );
00493 } else {
00494 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetTrue";
00495 }
00496
00497
00498 edm::Handle<GenMETCollection> genCalo;
00499 iEvent.getByLabel("genMetCalo", genCalo);
00500 if (genCalo.isValid()) {
00501 const GenMETCollection *genmetcol = genCalo.product();
00502 const GenMET *genMetCalo = &(genmetcol->front());
00503 double genMET = genMetCalo->pt();
00504 double genMETPhi = genMetCalo->phi();
00505
00506 me["hCaloMETResolution_GenMETCalo"]->Fill( caloMET - genMET );
00507 me["hCaloMETPhiResolution_GenMETCalo"]->Fill( TMath::ACos( TMath::Cos( caloMETPhi - genMETPhi ) ) );
00508 } else {
00509 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetCalo";
00510 }
00511
00512
00513 }
00514
00515
00516 else if (METType_ == "GenMET")
00517 {
00518 const GenMET *genmet;
00519
00520 edm::Handle<GenMETCollection> gen;
00521 iEvent.getByLabel(inputMETLabel_, gen);
00522 if (!gen.isValid()) {
00523 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task";
00524 edm::LogInfo("OutputInfo") << " MET Task cannot continue...!";
00525 return;
00526 } else {
00527 const GenMETCollection *genmetcol = gen.product();
00528 genmet = &(genmetcol->front());
00529 }
00530
00531
00532
00533 double genSumET = genmet->sumEt();
00534 double genMET = genmet->pt();
00535 double genMEx = genmet->px();
00536 double genMEy = genmet->py();
00537 double genMETPhi = genmet->phi();
00538 double genMETSig = genmet->mEtSig();
00539
00540
00541
00542
00543
00544
00545
00546 double NeutralEMEtFraction = genmet->NeutralEMEtFraction() ;
00547 double NeutralHadEtFraction = genmet->NeutralHadEtFraction() ;
00548 double ChargedEMEtFraction = genmet->ChargedEMEtFraction () ;
00549 double ChargedHadEtFraction = genmet->ChargedHadEtFraction();
00550 double MuonEtFraction = genmet->MuonEtFraction() ;
00551 double InvisibleEtFraction = genmet->InvisibleEtFraction() ;
00552
00553 me["hNevents"]->Fill(0);
00554 me["hGenMEx"]->Fill(genMEx);
00555 me["hGenMEy"]->Fill(genMEy);
00556 me["hGenMET"]->Fill(genMET);
00557 me["hGenMETPhi"]->Fill(genMETPhi);
00558 me["hGenSumET"]->Fill(genSumET);
00559 me["hGenMETSig"]->Fill(genMETSig);
00560
00561
00562 me["hNeutralEMEtFraction"]->Fill( NeutralEMEtFraction );
00563 me["hNeutralHadEtFraction"]->Fill( NeutralHadEtFraction );
00564 me["hChargedEMEtFraction"]->Fill( ChargedEMEtFraction );
00565 me["hChargedHadEtFraction"]->Fill( ChargedHadEtFraction );
00566 me["hMuonEtFraction"]->Fill( MuonEtFraction );
00567 me["hInvisibleEtFraction"]->Fill( InvisibleEtFraction );
00568
00569 me["hNevents"]->Fill(0.5);
00570 }
00571 else if( METType_ == "PFMET")
00572 {
00573 const PFMET *pfmet;
00574 edm::Handle<PFMETCollection> hpfmetcol;
00575 iEvent.getByLabel(inputMETLabel_,hpfmetcol);
00576 if(!hpfmetcol.isValid()){
00577 edm::LogInfo("OutputInfo") << "falied to retrieve data require by MET Task";
00578 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00579 return;
00580 }
00581 else
00582 {
00583 const PFMETCollection *pfmetcol = hpfmetcol.product();
00584 pfmet = &(pfmetcol->front());
00585 }
00586
00587 double SumET = pfmet->sumEt();
00588 double MET = pfmet->pt();
00589 double MEx = pfmet->px();
00590 double MEy = pfmet->py();
00591 double METPhi = pfmet->phi();
00592 double METSig = pfmet->mEtSig();
00593 me["hMEx"]->Fill(MEx);
00594 me["hMEy"]->Fill(MEy);
00595 me["hMET"]->Fill(MET);
00596 me["hMETPhi"]->Fill(METPhi);
00597 me["hSumET"]->Fill(SumET);
00598 me["hMETSig"]->Fill(METSig);
00599 me["hNevents"]->Fill(0.5);
00600
00601 edm::Handle<GenMETCollection> genTrue;
00602 iEvent.getByLabel("genMetTrue", genTrue);
00603 if (genTrue.isValid()) {
00604 const GenMETCollection *genmetcol = genTrue.product();
00605 const GenMET *genMetTrue = &(genmetcol->front());
00606 double genMET = genMetTrue->pt();
00607 double genMETPhi = genMetTrue->phi();
00608
00609 me["hMETResolution_GenMETTrue"]->Fill( MET - genMET );
00610 me["hMETPhiResolution_GenMETTrue"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
00611 } else {
00612 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetTrue";
00613 }
00614
00615
00616 edm::Handle<GenMETCollection> genCalo;
00617 iEvent.getByLabel("genMetCalo", genCalo);
00618 if (genCalo.isValid()) {
00619 const GenMETCollection *genmetcol = genCalo.product();
00620 const GenMET *genMetCalo = &(genmetcol->front());
00621 double genMET = genMetCalo->pt();
00622 double genMETPhi = genMetCalo->phi();
00623
00624 me["hMETResolution_GenMETCalo"]->Fill( MET - genMET );
00625 me["hMETPhiResolution_GenMETCalo"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
00626 } else {
00627 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetCalo";
00628 }
00629
00630
00631
00632 }
00633 else if (METType_ == "MET")
00634 {
00635 const MET *met;
00636
00637 edm::Handle<METCollection> hmetcol;
00638 iEvent.getByLabel(inputMETLabel_, hmetcol);
00639 if (!hmetcol.isValid()) {
00640 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task";
00641 edm::LogInfo("OutputInfo") << " MET Task cannot continue...!";
00642 return;
00643 } else {
00644 const METCollection *metcol = hmetcol.product();
00645 met = &(metcol->front());
00646 }
00647
00648
00649 double SumET = met->sumEt();
00650 double MET = met->pt();
00651 double MEx = met->px();
00652 double MEy = met->py();
00653 double METPhi = met->phi();
00654 double METSig = met->mEtSig();
00655
00656 me["hMEx"]->Fill(MEx);
00657 me["hMEy"]->Fill(MEy);
00658 me["hMET"]->Fill(MET);
00659 me["hMETPhi"]->Fill(METPhi);
00660 me["hSumET"]->Fill(SumET);
00661 me["hMETSig"]->Fill(METSig);
00662 me["hNevents"]->Fill(0.5);
00663
00664 }
00665 else if( METType_ == "TCMET" )
00666 {
00667 const MET *tcMet;
00668 edm::Handle<METCollection> htcMetcol;
00669 iEvent.getByLabel(inputMETLabel_, htcMetcol);
00670
00671 const CaloMET *caloMet;
00672 edm::Handle<CaloMETCollection> hcaloMetcol;
00673 iEvent.getByLabel(inputCaloMETLabel_, hcaloMetcol);
00674
00675 edm::Handle< reco::MuonCollection > muon_h;
00676 iEvent.getByLabel(inputMuonLabel_, muon_h);
00677
00678
00679 edm::Handle<reco::TrackCollection> track_h;
00680 iEvent.getByLabel(inputTrackLabel_, track_h);
00681
00682 edm::Handle< edm::View<reco::GsfElectron > > electron_h;
00683 iEvent.getByLabel(inputElectronLabel_, electron_h);
00684
00685 edm::Handle< reco::BeamSpot > beamSpot_h;
00686 iEvent.getByLabel(inputBeamSpotLabel_, beamSpot_h);
00687
00688 if(!htcMetcol.isValid()){
00689 edm::LogInfo("OutputInfo") << "falied to retrieve data require by MET Task";
00690 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00691 return;
00692 }
00693 else
00694 {
00695 const METCollection *tcMetcol = htcMetcol.product();
00696 tcMet = &(tcMetcol->front());
00697 }
00698
00699 if(!hcaloMetcol.isValid()){
00700 edm::LogInfo("OutputInfo") << "falied to retrieve data require by MET Task";
00701 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00702 return;
00703 }
00704 else
00705 {
00706 const CaloMETCollection *caloMetcol = hcaloMetcol.product();
00707 caloMet = &(caloMetcol->front());
00708 }
00709
00710 if(!muon_h.isValid()){
00711 edm::LogInfo("OutputInfo") << "falied to retrieve muon data require by MET Task";
00712 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00713 return;
00714 }
00715
00716 if(!track_h.isValid()){
00717 edm::LogInfo("OutputInfo") << "falied to retrieve track data require by MET Task";
00718 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00719 return;
00720 }
00721
00722 if(!electron_h.isValid()){
00723 edm::LogInfo("OutputInfo") << "falied to retrieve electron data require by MET Task";
00724 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00725 return;
00726 }
00727
00728 if(!beamSpot_h.isValid()){
00729 edm::LogInfo("OutputInfo") << "falied to retrieve beam spot data require by MET Task";
00730 edm::LogInfo("OutputInfo") << "MET Taks cannot continue...!";
00731 return;
00732 }
00733
00734 math::XYZPoint bspot = ( beamSpot_h.isValid() ) ? beamSpot_h->position() : math::XYZPoint(0, 0, 0);
00735
00736
00737
00738 edm::Handle< edm::ValueMap<reco::MuonMETCorrectionData> > tcMet_ValueMap_Handle;
00739 iEvent.getByLabel("muonTCMETValueMapProducer" , "muCorrData", tcMet_ValueMap_Handle);
00740
00741
00742 int nM = 0;
00743
00744 for( unsigned int mus = 0; mus < muon_h->size() ; mus++ ) {
00745
00746 reco::MuonRef muref( muon_h, mus);
00747 if( muref->pt() < 20 ) continue;
00748
00749 reco::MuonMETCorrectionData muCorrData = (*tcMet_ValueMap_Handle)[muref];
00750 int type = muCorrData.type();
00751
00752 if( type == 1 || type == 2 || type == 5 ) ++nM;
00753 }
00754
00755
00756 int nE = 0;
00757
00758 for( edm::View<reco::GsfElectron>::const_iterator eleit = electron_h->begin(); eleit != electron_h->end(); eleit++ ) {
00759 if( eleit->p4().pt() < 20 ) continue;
00760 ++nE;
00761 }
00762
00763 if( strcmp( sample_.c_str() , "zmm" ) == 0 && nM != 2 ) return;
00764
00765 if( strcmp( sample_.c_str() , "zee" ) == 0 && nE != 2 ) return;
00766
00767 if( strcmp( sample_.c_str() , "ttbar" ) == 0 && ( nE + nM ) == 0 ) return;
00768
00769
00770 double SumET = tcMet->sumEt();
00771 double MET = tcMet->pt();
00772 double MEx = tcMet->px();
00773 double MEy = tcMet->py();
00774 double METPhi = tcMet->phi();
00775 double METSig = tcMet->mEtSig();
00776
00777 me["hMEx"]->Fill(MEx);
00778 me["hMEy"]->Fill(MEy);
00779 me["hMET"]->Fill(MET);
00780 me["hMETPhi"]->Fill(METPhi);
00781 me["hSumET"]->Fill(SumET);
00782 me["hMETSig"]->Fill(METSig);
00783 me["hNevents"]->Fill(0.5);
00784
00785 double caloMET = caloMet->pt();
00786 double caloMEx = caloMet->px();
00787 double caloMEy = caloMet->py();
00788
00789 me["hdMETx"]->Fill(caloMEx-MEx);
00790 me["hdMETy"]->Fill(caloMEy-MEy);
00791 me["hdMET"]->Fill(caloMET-MET);
00792
00793 unsigned int nTracks = track_h->size();
00794 unsigned int nCorrTracks = 0;
00795 unsigned int trackCount = 0;
00796
00797 for( reco::TrackCollection::const_iterator trkit = track_h->begin(); trkit != track_h->end(); trkit++ ) {
00798 ++trackCount;
00799 me["htrkPt"]->Fill( trkit->pt() );
00800 me["htrkEta"]->Fill( trkit->eta() );
00801 me["htrkNhits"]->Fill( trkit->numberOfValidHits() );
00802 me["htrkChi2"]->Fill( trkit->chi2() / trkit->ndof() );
00803
00804 double d0 = -1 * trkit->dxy( bspot );
00805
00806 me["htrkD0"]->Fill( d0 );
00807
00808 me["htrkQuality"]->Fill( trkit->qualityMask() );
00809 me["htrkAlgo"]->Fill( trkit->algo() );
00810 me["htrkPtErr"]->Fill( trkit->ptError() / trkit->pt() );
00811
00812 reco::TrackRef trkref( track_h, trackCount );
00813
00814 if( isGoodTrack( trkref, d0) ) ++nCorrTracks;
00815 }
00816
00817 float frac = (float)nCorrTracks / (float)nTracks;
00818 me["hfracTrks"]->Fill(frac);
00819
00820 int nEls = 0;
00821 for( edm::View<reco::GsfElectron>::const_iterator eleit = electron_h->begin(); eleit != electron_h->end(); eleit++ ) {
00822 me["helePt"]->Fill( eleit->p4().pt() );
00823 me["heleEta"]->Fill( eleit->p4().eta() );
00824 me["heleHoE"]->Fill( eleit->hadronicOverEm() );
00825
00826 reco::TrackRef el_track = eleit->closestCtfTrackRef();
00827
00828 unsigned int ele_idx = el_track.isNonnull() ? el_track.key() : 99999;
00829
00830 if( eleit->hadronicOverEm() < 0.1 && ele_idx < nTracks )
00831 ++nEls;
00832 }
00833
00834 me["hnEls"]->Fill(nEls);
00835
00836 for( reco::MuonCollection::const_iterator muonit = muon_h->begin(); muonit != muon_h->end(); muonit++ ) {
00837
00838 const reco::TrackRef siTrack = muonit->innerTrack();
00839
00840 me["hmuPt"]->Fill( muonit->p4().pt() );
00841 me["hmuEta"]->Fill( muonit->p4().eta() );
00842 me["hmuNhits"]->Fill( siTrack.isNonnull() ? siTrack->numberOfValidHits() : -999 );
00843 me["hmuChi2"]->Fill( siTrack.isNonnull() ? siTrack->chi2()/siTrack->ndof() : -999 );
00844
00845 double d0 = siTrack.isNonnull() ? -1 * siTrack->dxy( bspot) : -999;
00846
00847 me["hmuD0"]->Fill( d0 );
00848 }
00849
00850
00851
00852
00853 edm::Handle< edm::ValueMap<reco::MuonMETCorrectionData> > muon_ValueMap_Handle;
00854 iEvent.getByLabel("muonMETValueMapProducer" , "muCorrData", muon_ValueMap_Handle);
00855
00856 const unsigned int nMuons = muon_h->size();
00857
00858 int nMus = 0;
00859 int nMusPis = 0;
00860 double muDx = 0;
00861 double muDy = 0;
00862 for( unsigned int mus = 0; mus < nMuons; mus++ )
00863 {
00864 reco::MuonRef muref( muon_h, mus);
00865 reco::MuonMETCorrectionData muCorrData = (*tcMet_ValueMap_Handle)[muref];
00866 reco::MuonMETCorrectionData muonCorrData = (*muon_ValueMap_Handle)[muref];
00867
00868 me["hMExCorrection"] -> Fill(muCorrData.corrX());
00869 me["hMEyCorrection"] -> Fill(muCorrData.corrY());
00870
00871 int type = muCorrData.type();
00872 me["hMuonCorrectionFlag"]-> Fill(type);
00873
00874 if( type == 1 || type == 2 || type == 5 ) {
00875 ++nMus;
00876
00877 if( type == 1 ) {
00878 muDx += muonCorrData.corrX() - muref->globalTrack()->px();
00879 muDy += muonCorrData.corrY() - muref->globalTrack()->py();
00880 }
00881 else if( type == 2 ) {
00882 muDx += muonCorrData.corrX() - muref->innerTrack()->px();
00883 muDy += muonCorrData.corrY() - muref->innerTrack()->py();
00884 }
00885 else if( type == 5 ) {
00886 muDx += muonCorrData.corrX() - muref->px();
00887 muDy += muonCorrData.corrY() - muref->py();
00888 }
00889 }
00890 else if( type == 4 )
00891 ++nMusPis;
00892 }
00893
00894 me["hnMus"]->Fill(nMus);
00895 me["hnMusPis"]->Fill(nMusPis);
00896 me["hdMUx"]->Fill(muDx);
00897 me["hdMUy"]->Fill(muDy);
00898
00899 edm::Handle<GenMETCollection> genTrue;
00900 iEvent.getByLabel("genMetTrue", genTrue);
00901 if (genTrue.isValid()) {
00902 const GenMETCollection *genmetcol = genTrue.product();
00903 const GenMET *genMetTrue = &(genmetcol->front());
00904 double genMET = genMetTrue->pt();
00905 double genMETPhi = genMetTrue->phi();
00906
00907 me["hMETResolution_GenMETTrue"]->Fill( MET - genMET );
00908 me["hMETPhiResolution_GenMETTrue"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
00909 } else {
00910 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetTrue";
00911 }
00912
00913
00914 edm::Handle<GenMETCollection> genCalo;
00915 iEvent.getByLabel("genMetCalo", genCalo);
00916 if (genCalo.isValid()) {
00917 const GenMETCollection *genmetcol = genCalo.product();
00918 const GenMET *genMetCalo = &(genmetcol->front());
00919 double genMET = genMetCalo->pt();
00920 double genMETPhi = genMetCalo->phi();
00921
00922 me["hMETResolution_GenMETCalo"]->Fill( MET - genMET );
00923 me["hMETPhiResolution_GenMETCalo"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
00924 } else {
00925 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetCalo";
00926 }
00927 }
00928
00929 else if( inputMETLabel_.label() == "corMetGlobalMuons" )
00930 {
00931 const CaloMET *corMetGlobalMuons = 0;
00932 edm::Handle<CaloMETCollection> hcorMetGlobalMuonscol;
00933 iEvent.getByLabel(inputMETLabel_, hcorMetGlobalMuonscol );
00934 if(! hcorMetGlobalMuonscol.isValid()){
00935 edm::LogInfo("OutputInfo") << "hcorMetGlobalMuonscol is NOT Valid";
00936 edm::LogInfo("OutputInfo") << "MET Taks continues anyway...!";
00937 }
00938 else
00939 {
00940 const CaloMETCollection *corMetGlobalMuonscol = hcorMetGlobalMuonscol.product();
00941 corMetGlobalMuons = &(corMetGlobalMuonscol->front());
00942 }
00943
00944
00945 double SumET = corMetGlobalMuons->sumEt();
00946 double MET = corMetGlobalMuons->pt();
00947 double MEx = corMetGlobalMuons->px();
00948 double MEy = corMetGlobalMuons->py();
00949 double METPhi = corMetGlobalMuons->phi();
00950 double METSig = corMetGlobalMuons->mEtSig();
00951 me["hMEx"]->Fill(MEx);
00952 me["hMEy"]->Fill(MEy);
00953 me["hMET"]->Fill(MET);
00954 me["hMETPhi"]->Fill(METPhi);
00955 me["hSumET"]->Fill(SumET);
00956 me["hMETSig"]->Fill(METSig);
00957 me["hNevents"]->Fill(0.5);
00958
00959 edm::Handle< edm::ValueMap<reco::MuonMETCorrectionData> > corMetGlobalMuons_ValueMap_Handle;
00960 iEvent.getByLabel("muonMETValueMapProducer" , "muCorrData", corMetGlobalMuons_ValueMap_Handle);
00961
00962 edm::Handle< reco::MuonCollection > muon_Handle;
00963 iEvent.getByLabel("muons", muon_Handle);
00964
00965 edm::Handle< reco::BeamSpot > beamSpot_h;
00966 iEvent.getByLabel(inputBeamSpotLabel_, beamSpot_h);
00967
00968 if(!beamSpot_h.isValid()){
00969 edm::LogInfo("OutputInfo") << "beamSpot is NOT Valid";
00970 edm::LogInfo("OutputInfo") << "MET Taks continues anyway...!";
00971 }
00972
00973 math::XYZPoint bspot = ( beamSpot_h.isValid() ) ? beamSpot_h->position() : math::XYZPoint(0, 0, 0);
00974
00975 for( reco::MuonCollection::const_iterator muonit = muon_Handle->begin(); muonit != muon_Handle->end(); muonit++ ) {
00976
00977 const reco::TrackRef siTrack = muonit->innerTrack();
00978 const reco::TrackRef globalTrack = muonit->globalTrack();
00979
00980 me["hmuPt"]->Fill( muonit->p4().pt() );
00981 me["hmuEta"]->Fill( muonit->p4().eta() );
00982 me["hmuNhits"]->Fill( siTrack.isNonnull() ? siTrack->numberOfValidHits() : -999 );
00983 me["hmuChi2"]->Fill( siTrack.isNonnull() ? siTrack->chi2()/siTrack->ndof() : -999 );
00984
00985 double d0 = siTrack.isNonnull() ? -1 * siTrack->dxy( bspot) : -999;
00986
00987 me["hmuD0"]->Fill( d0 );
00988
00989 int nHits = globalTrack.isNonnull() ? globalTrack->hitPattern().numberOfValidMuonHits() : -999;
00990
00991 me["hmuSAhits"]->Fill( nHits );
00992 }
00993
00994 const unsigned int nMuons = muon_Handle->size();
00995 for( unsigned int mus = 0; mus < nMuons; mus++ )
00996 {
00997 reco::MuonRef muref( muon_Handle, mus);
00998 reco::MuonMETCorrectionData muCorrData = (*corMetGlobalMuons_ValueMap_Handle)[muref];
00999
01000 me["hMExCorrection"] -> Fill(muCorrData.corrY());
01001 me["hMEyCorrection"] -> Fill(muCorrData.corrX());
01002 me["hMuonCorrectionFlag"]-> Fill(muCorrData.type());
01003 }
01004
01005 edm::Handle<GenMETCollection> genTrue;
01006 iEvent.getByLabel("genMetTrue", genTrue);
01007 if (genTrue.isValid()) {
01008 const GenMETCollection *genmetcol = genTrue.product();
01009 const GenMET *genMetTrue = &(genmetcol->front());
01010 double genMET = genMetTrue->pt();
01011 double genMETPhi = genMetTrue->phi();
01012
01013 me["hMETResolution_GenMETTrue"]->Fill( MET - genMET );
01014 me["hMETPhiResolution_GenMETTrue"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
01015 } else {
01016 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetTrue";
01017 }
01018
01019
01020 edm::Handle<GenMETCollection> genCalo;
01021 iEvent.getByLabel("genMetCalo", genCalo);
01022 if (genCalo.isValid()) {
01023 const GenMETCollection *genmetcol = genCalo.product();
01024 const GenMET *genMetCalo = &(genmetcol->front());
01025 double genMET = genMetCalo->pt();
01026 double genMETPhi = genMetCalo->phi();
01027
01028 me["hMETResolution_GenMETCalo"]->Fill( MET - genMET );
01029 me["hMETPhiResolution_GenMETCalo"]->Fill( TMath::ACos( TMath::Cos( METPhi - genMETPhi ) ) );
01030 } else {
01031 edm::LogInfo("OutputInfo") << " failed to retrieve data required by MET Task: genMetCalo";
01032 }
01033
01034
01035
01036 }
01037
01038 }
01039
01040 void METTester::endJob()
01041 {
01042 }
01043
01044
01045 bool METTester::isGoodTrack( const reco::TrackRef track, float d0corr ) {
01046
01047 if( fabs( d0corr ) > maxd0_ ) return false;
01048 if( track->numberOfValidHits() < minhits_ ) return false;
01049 if( track->normalizedChi2() > maxchi2_ ) return false;
01050 if( fabs( track->eta() ) > maxeta_ ) return false;
01051 if( track->pt() > maxpt_ ) return false;
01052 if( (track->ptError() / track->pt()) > maxPtErr_ ) return false;
01053
01054 int cut = 0;
01055 for( unsigned int i = 0; i < trkQuality_.size(); i++ ) {
01056
01057 cut |= (1 << trkQuality_.at(i));
01058 }
01059
01060 if( !( ( track->qualityMask() & cut ) == cut ) ) return false;
01061
01062 bool isGoodAlgo = false;
01063 if( trkAlgos_.size() == 0 ) isGoodAlgo = true;
01064 for( unsigned int i = 0; i < trkAlgos_.size(); i++ ) {
01065
01066 if( track->algo() == trkAlgos_.at(i) ) isGoodAlgo = true;
01067 }
01068
01069 if( !isGoodAlgo ) return false;
01070
01071 return true;
01072 }