00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "DQMOffline/JetMET/interface/CaloMETAnalyzer.h"
00011 #include "DataFormats/Common/interface/Handle.h"
00012
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014 #include "FWCore/Common/interface/TriggerNames.h"
00015
00016 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h"
00017 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h"
00018 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00019 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
00020
00021 #include "DataFormats/Math/interface/LorentzVector.h"
00022
00023 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h"
00024 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetup.h"
00025 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00026
00027 #include "TLorentzVector.h"
00028
00029 #include <string>
00030 using namespace edm;
00031
00032
00033 CaloMETAnalyzer::CaloMETAnalyzer(const edm::ParameterSet& pSet) {
00034
00035 parameters = pSet;
00036
00037 edm::ParameterSet highptjetparms = parameters.getParameter<edm::ParameterSet>("highPtJetTrigger");
00038 edm::ParameterSet lowptjetparms = parameters.getParameter<edm::ParameterSet>("lowPtJetTrigger" );
00039 edm::ParameterSet minbiasparms = parameters.getParameter<edm::ParameterSet>("minBiasTrigger" );
00040 edm::ParameterSet highmetparms = parameters.getParameter<edm::ParameterSet>("highMETTrigger" );
00041
00042 edm::ParameterSet eleparms = parameters.getParameter<edm::ParameterSet>("eleTrigger" );
00043 edm::ParameterSet muonparms = parameters.getParameter<edm::ParameterSet>("muonTrigger" );
00044
00045
00046 _HighPtJetEventFlag = new GenericTriggerEventFlag( highptjetparms );
00047 _LowPtJetEventFlag = new GenericTriggerEventFlag( lowptjetparms );
00048 _MinBiasEventFlag = new GenericTriggerEventFlag( minbiasparms );
00049 _HighMETEventFlag = new GenericTriggerEventFlag( highmetparms );
00050
00051 _EleEventFlag = new GenericTriggerEventFlag( eleparms );
00052 _MuonEventFlag = new GenericTriggerEventFlag( muonparms );
00053
00054 highPtJetExpr_ = highptjetparms.getParameter<std::vector<std::string> >("hltPaths");
00055 lowPtJetExpr_ = lowptjetparms .getParameter<std::vector<std::string> >("hltPaths");
00056 highMETExpr_ = highmetparms .getParameter<std::vector<std::string> >("hltPaths");
00057
00058 muonExpr_ = muonparms .getParameter<std::vector<std::string> >("hltPaths");
00059 elecExpr_ = eleparms .getParameter<std::vector<std::string> >("hltPaths");
00060 minbiasExpr_ = minbiasparms .getParameter<std::vector<std::string> >("hltPaths");
00061
00062 }
00063
00064
00065 CaloMETAnalyzer::~CaloMETAnalyzer() {
00066
00067 delete _HighPtJetEventFlag;
00068 delete _LowPtJetEventFlag;
00069 delete _MinBiasEventFlag;
00070 delete _HighMETEventFlag;
00071
00072 delete _EleEventFlag;
00073 delete _MuonEventFlag;
00074
00075 }
00076
00077
00078 void CaloMETAnalyzer::beginJob(DQMStore * dbe) {
00079
00080 evtCounter = 0;
00081 metname = "caloMETAnalyzer";
00082
00083
00084 HLTPathsJetMBByName_ = parameters.getParameter<std::vector<std::string > >("HLTPathsJetMB");
00085
00086 theCleaningParameters = parameters.getParameter<ParameterSet>("CleaningParameters"),
00087
00088
00089 gtTag = theCleaningParameters.getParameter<edm::InputTag>("gtLabel");
00090 _techTrigsAND = theCleaningParameters.getParameter<std::vector<unsigned > >("techTrigsAND");
00091 _techTrigsOR = theCleaningParameters.getParameter<std::vector<unsigned > >("techTrigsOR");
00092 _techTrigsNOT = theCleaningParameters.getParameter<std::vector<unsigned > >("techTrigsNOT");
00093
00094 _doHLTPhysicsOn = theCleaningParameters.getParameter<bool>("doHLTPhysicsOn");
00095 _hlt_PhysDec = theCleaningParameters.getParameter<std::string>("HLT_PhysDec");
00096
00097 _tightBHFiltering = theCleaningParameters.getParameter<bool>("tightBHFiltering");
00098 _tightJetIDFiltering = theCleaningParameters.getParameter<int>("tightJetIDFiltering");
00099 _tightHcalFiltering = theCleaningParameters.getParameter<bool>("tightHcalFiltering");
00100
00101
00102
00103
00104 DCSFilter = new JetMETDQMDCSFilter(parameters.getParameter<ParameterSet>("DCSFilter"));
00105
00106
00107 _doPVCheck = theCleaningParameters.getParameter<bool>("doPrimaryVertexCheck");
00108 vertexTag = theCleaningParameters.getParameter<edm::InputTag>("vertexLabel");
00109
00110 if (_doPVCheck) {
00111 _nvtx_min = theCleaningParameters.getParameter<int>("nvtx_min");
00112 _nvtxtrks_min = theCleaningParameters.getParameter<int>("nvtxtrks_min");
00113 _vtxndof_min = theCleaningParameters.getParameter<int>("vtxndof_min");
00114 _vtxchi2_max = theCleaningParameters.getParameter<double>("vtxchi2_max");
00115 _vtxz_max = theCleaningParameters.getParameter<double>("vtxz_max");
00116 }
00117
00118
00119
00120 theCaloMETCollectionLabel = parameters.getParameter<edm::InputTag>("METCollectionLabel");
00121 _source = parameters.getParameter<std::string>("Source");
00122
00123 if (theCaloMETCollectionLabel.label() == "corMetGlobalMuons" ) {
00124 inputBeamSpotLabel = parameters.getParameter<edm::InputTag>("InputBeamSpotLabel");
00125 }
00126
00127
00128 theCaloTowersLabel = parameters.getParameter<edm::InputTag>("CaloTowersLabel");
00129 theJetCollectionLabel = parameters.getParameter<edm::InputTag>("JetCollectionLabel");
00130 HcalNoiseRBXCollectionTag = parameters.getParameter<edm::InputTag>("HcalNoiseRBXCollection");
00131 HcalNoiseSummaryTag = parameters.getParameter<edm::InputTag>("HcalNoiseSummary");
00132 BeamHaloSummaryTag = parameters.getParameter<edm::InputTag>("BeamHaloSummaryLabel");
00133
00134
00135 _verbose = parameters.getParameter<int>("verbose");
00136 _print = parameters.getParameter<int>("printOut");
00137 _etThreshold = parameters.getParameter<double>("etThreshold");
00138 _allhist = parameters.getParameter<bool>("allHist");
00139 _allSelection= parameters.getParameter<bool>("allSelection");
00140 _cleanupSelection= parameters.getParameter<bool>("cleanupSelection");
00141
00142 _highPtJetThreshold = parameters.getParameter<double>("HighPtJetThreshold");
00143 _lowPtJetThreshold = parameters.getParameter<double>("LowPtJetThreshold");
00144 _highMETThreshold = parameters.getParameter<double>("HighMETThreshold");
00145
00146
00147
00148 jetID = new reco::helper::JetIDHelper(parameters.getParameter<ParameterSet>("JetIDParams"));
00149
00150
00151 LogTrace(metname)<<"[CaloMETAnalyzer] Parameters initialization";
00152 std::string DirName = "JetMET/MET/"+_source;
00153 dbe->setCurrentFolder(DirName);
00154
00155 hmetME = dbe->book1D("metReco", "metReco", 4, 1, 5);
00156 hmetME->setBinLabel(1,"CaloMET",1);
00157
00158 _dbe = dbe;
00159
00160 _FolderNames.push_back("All");
00161 _FolderNames.push_back("BasicCleanup");
00162 _FolderNames.push_back("ExtraCleanup");
00163 _FolderNames.push_back("HcalNoiseFilter");
00164 _FolderNames.push_back("HcalNoiseFilterTight");
00165 _FolderNames.push_back("JetIDMinimal");
00166 _FolderNames.push_back("JetIDLoose");
00167 _FolderNames.push_back("JetIDTight");
00168 _FolderNames.push_back("BeamHaloIDTightPass");
00169 _FolderNames.push_back("BeamHaloIDLoosePass");
00170 _FolderNames.push_back("Triggers");
00171 _FolderNames.push_back("PV");
00172
00173 for (std::vector<std::string>::const_iterator ic = _FolderNames.begin();
00174 ic != _FolderNames.end(); ic++){
00175 if (*ic=="All") bookMESet(DirName+"/"+*ic);
00176 if (_cleanupSelection){
00177 if (*ic=="BasicCleanup") bookMESet(DirName+"/"+*ic);
00178 if (*ic=="ExtraCleanup") bookMESet(DirName+"/"+*ic);
00179 }
00180 if (_allSelection){
00181 if (*ic=="HcalNoiseFilter") bookMESet(DirName+"/"+*ic);
00182 if (*ic=="HcalNoiseFilterTight") bookMESet(DirName+"/"+*ic);
00183 if (*ic=="JetIDMinimal") bookMESet(DirName+"/"+*ic);
00184 if (*ic=="JetIDLoose") bookMESet(DirName+"/"+*ic);
00185 if (*ic=="JetIDTight") bookMESet(DirName+"/"+*ic);
00186 if (*ic=="BeamHaloIDTightPass") bookMESet(DirName+"/"+*ic);
00187 if (*ic=="BeamHaloIDLoosePass") bookMESet(DirName+"/"+*ic);
00188 if (*ic=="Triggers") bookMESet(DirName+"/"+*ic);
00189 if (*ic=="PV") bookMESet(DirName+"/"+*ic);
00190 }
00191 }
00192 }
00193
00194
00195
00196 void CaloMETAnalyzer::endJob() {
00197
00198 delete jetID;
00199 delete DCSFilter;
00200
00201 }
00202
00203
00204
00205 void CaloMETAnalyzer::bookMESet(std::string DirName)
00206 {
00207 bool bLumiSecPlot=false;
00208 if (DirName.find("All")!=std::string::npos) bLumiSecPlot=true;
00209
00210 bookMonitorElement(DirName,bLumiSecPlot);
00211
00212 if ( _HighPtJetEventFlag->on() ) {
00213 bookMonitorElementTriggered(DirName+"/"+"HighPtJet",false);
00214 hTriggerName_HighPtJet = _dbe->bookString("triggerName_HighPtJet", highPtJetExpr_[0]);
00215 }
00216
00217 if ( _LowPtJetEventFlag->on() ) {
00218 bookMonitorElementTriggered(DirName+"/"+"LowPtJet",false);
00219 hTriggerName_LowPtJet = _dbe->bookString("triggerName_LowPtJet", lowPtJetExpr_[0]);
00220 }
00221
00222 if ( _MinBiasEventFlag->on() ) {
00223 bookMonitorElementTriggered(DirName+"/"+"MinBias",false);
00224 hTriggerName_MinBias = _dbe->bookString("triggerName_MinBias", minbiasExpr_[0]);
00225 if (_verbose) std::cout << "_MinBiasEventFlag is on, folder created\n";
00226 }
00227
00228 if ( _HighMETEventFlag->on() ) {
00229 bookMonitorElementTriggered(DirName+"/"+"HighMET",false);
00230 hTriggerName_HighMET = _dbe->bookString("triggerName_HighMET", highMETExpr_[0]);
00231 }
00232
00233
00234
00235
00236
00237
00238 if ( _EleEventFlag->on() ) {
00239 bookMonitorElementTriggered(DirName+"/"+"Ele",false);
00240 hTriggerName_Ele = _dbe->bookString("triggerName_Ele", elecExpr_[0]);
00241 if (_verbose) std::cout << "_EleEventFlag is on, folder created\n";
00242 }
00243
00244 if ( _MuonEventFlag->on() ) {
00245 bookMonitorElementTriggered(DirName+"/"+"Muon",false);
00246 hTriggerName_Muon = _dbe->bookString("triggerName_Muon", muonExpr_[0]);
00247 if (_verbose) std::cout << "_MuonEventFlag is on, folder created\n";
00248 }
00249 }
00250
00251
00252 void CaloMETAnalyzer::bookMonitorElement(std::string DirName, bool bLumiSecPlot=false)
00253 {
00254 if (_verbose) std::cout << "bookMonitorElement " << DirName << std::endl;
00255
00256 _dbe->setCurrentFolder(DirName);
00257
00258 bookMonitorElementTriggered(DirName, bLumiSecPlot);
00259
00260
00261 if (_allhist) {
00262
00263 hCaloMaxEtInEmTowers = _dbe->book1D("METTask_CaloMaxEtInEmTowers", "METTask_CaloMaxEtInEmTowers" ,100,0,2000);
00264 hCaloMaxEtInEmTowers->setAxisTitle("Et(Max) in EM Tower [GeV]",1);
00265 hCaloMaxEtInHadTowers = _dbe->book1D("METTask_CaloMaxEtInHadTowers", "METTask_CaloMaxEtInHadTowers" ,100,0,2000);
00266 hCaloMaxEtInHadTowers->setAxisTitle("Et(Max) in Had Tower [GeV]",1);
00267
00268 hCaloHadEtInHB = _dbe->book1D("METTask_CaloHadEtInHB","METTask_CaloHadEtInHB",100,0,2000);
00269 hCaloHadEtInHB->setAxisTitle("Had Et [GeV]",1);
00270 hCaloHadEtInHO = _dbe->book1D("METTask_CaloHadEtInHO","METTask_CaloHadEtInHO",25,0,500);
00271 hCaloHadEtInHO->setAxisTitle("Had Et [GeV]",1);
00272 hCaloHadEtInHE = _dbe->book1D("METTask_CaloHadEtInHE","METTask_CaloHadEtInHE",100,0,2000);
00273 hCaloHadEtInHE->setAxisTitle("Had Et [GeV]",1);
00274 hCaloHadEtInHF = _dbe->book1D("METTask_CaloHadEtInHF","METTask_CaloHadEtInHF",50,0,1000);
00275 hCaloHadEtInHF->setAxisTitle("Had Et [GeV]",1);
00276 hCaloEmEtInHF = _dbe->book1D("METTask_CaloEmEtInHF" ,"METTask_CaloEmEtInHF" ,25,0,500);
00277 hCaloEmEtInHF->setAxisTitle("EM Et [GeV]",1);
00278 hCaloEmEtInEE = _dbe->book1D("METTask_CaloEmEtInEE" ,"METTask_CaloEmEtInEE" ,50,0,1000);
00279 hCaloEmEtInEE->setAxisTitle("EM Et [GeV]",1);
00280 hCaloEmEtInEB = _dbe->book1D("METTask_CaloEmEtInEB" ,"METTask_CaloEmEtInEB" ,100,0,2000);
00281 hCaloEmEtInEB->setAxisTitle("EM Et [GeV]",1);
00282
00283 hCaloEmMEx= _dbe->book1D("METTask_CaloEmMEx","METTask_CaloEmMEx",200,-500,500);
00284 hCaloEmMEx->setAxisTitle("EM MEx [GeV]",1);
00285 hCaloEmMEy= _dbe->book1D("METTask_CaloEmMEy","METTask_CaloEmMEy",200,-500,500);
00286 hCaloEmMEy->setAxisTitle("EM MEy [GeV]",1);
00287 hCaloEmMET= _dbe->book1D("METTask_CaloEmMET","METTask_CaloEmMET",200,0,1000);
00288 hCaloEmMET->setAxisTitle("EM MET [GeV]",1);
00289 hCaloEmMETPhi= _dbe->book1D("METTask_CaloEmMETPhi","METTask_CaloEmMETPhi", 60, -3.2, 3.2);
00290 hCaloEmMETPhi->setAxisTitle("EM METPhi [rad]",1);
00291
00292 hCaloHaMEx= _dbe->book1D("METTask_CaloHaMEx","METTask_CaloHaMEx",200,-500,500);
00293 hCaloHaMEx->setAxisTitle("HA MEx [GeV]",1);
00294 hCaloHaMEy= _dbe->book1D("METTask_CaloHaMEy","METTask_CaloHaMEy",200,-500,500);
00295 hCaloHaMEy->setAxisTitle("HA MEy [GeV]",1);
00296 hCaloHaMET= _dbe->book1D("METTask_CaloHaMET","METTask_CaloHaMET",200,0,1000);
00297 hCaloHaMET->setAxisTitle("HA MET [GeV]",1);
00298 hCaloHaMETPhi= _dbe->book1D("METTask_CaloHaMETPhi","METTask_CaloHaMETPhi", 60, -3.2, 3.2);
00299 hCaloHaMETPhi->setAxisTitle("HA METPhi [rad]",1);
00300 }
00301 }
00302
00303
00304
00305 void CaloMETAnalyzer::bookMonitorElementTriggered(std::string DirName, bool bLumiSecPlot=false)
00306 {
00307 if (_verbose) std::cout << "bookMonitorElementTriggered " << DirName << std::endl;
00308
00309 _dbe->setCurrentFolder(DirName);
00310
00311
00312 hCaloMEx = _dbe->book1D("METTask_CaloMEx", "METTask_CaloMEx", 200, -500, 500);
00313 hCaloMEy = _dbe->book1D("METTask_CaloMEy", "METTask_CaloMEy", 200, -500, 500);
00314 hCaloMET = _dbe->book1D("METTask_CaloMET", "METTask_CaloMET", 200, 0, 1000);
00315 hCaloMET1 = _dbe->book1D("METTask_CaloMET1", "METTask_CaloMET1", 80, 0, 200);
00316 hCaloMETNoHF = _dbe->book1D("METTask_CaloMETNoHF", "METTask_CaloMETNoHF", 200, 0, 1000);
00317 hCaloSumET = _dbe->book1D("METTask_CaloSumET", "METTask_CaloSumET", 400, 0, 4000);
00318 hCaloMETSig = _dbe->book1D("METTask_CaloMETSig", "METTask_CaloMETSig", 51, 0, 51);
00319 hCaloMETPhi = _dbe->book1D("METTask_CaloMETPhi", "METTask_CaloMETPhi", 60, -3.2, 3.2);
00320 hCaloMETPhi020 = _dbe->book1D("METTask_CaloMETPhi020", "METTask_CaloMETPhi020", 60, -3.2, 3.2);
00321 hCaloMET_logx = _dbe->book1D("METTask_CaloMET_logx", "METTask_CaloMET_logx", 40, -1, 7);
00322 hCaloSumET_logx = _dbe->book1D("METTask_CaloSumET_logx", "METTask_CaloSumET_logx", 40, -1, 7);
00323
00324 hCaloMEx ->setAxisTitle("MEx [GeV]", 1);
00325 hCaloMEy ->setAxisTitle("MEy [GeV]", 1);
00326 hCaloMET ->setAxisTitle("MET [GeV]", 1);
00327 hCaloMET1 ->setAxisTitle("MET [GeV]", 1);
00328 hCaloMETNoHF ->setAxisTitle("MET (No HF) [GeV]", 1);
00329 hCaloSumET ->setAxisTitle("SumET [GeV]", 1);
00330 hCaloMETSig ->setAxisTitle("METSig", 1);
00331 hCaloMETPhi ->setAxisTitle("METPhi [rad]", 1);
00332 hCaloMETPhi020 ->setAxisTitle("METPhi [rad] (MET>20 GeV)", 1);
00333 hCaloMET_logx ->setAxisTitle("log(MET) [GeV]", 1);
00334 hCaloSumET_logx->setAxisTitle("log(SumET) [GeV]", 1);
00335
00336
00337
00338
00339 hCaloMEx_profile = _dbe->bookProfile("METTask_CaloMEx_profile", "MEx [GeV]", nbinsPV, PVlow, PVup, 200, -500, 500);
00340 hCaloMEy_profile = _dbe->bookProfile("METTask_CaloMEy_profile", "MEy [GeV]", nbinsPV, PVlow, PVup, 200, -500, 500);
00341 hCaloMET_profile = _dbe->bookProfile("METTask_CaloMET_profile", "MET [GeV]", nbinsPV, PVlow, PVup, 200, 0, 1000);
00342 hCaloMETNoHF_profile = _dbe->bookProfile("METTask_CaloMETNoHF_profile", "METNoHF [GeV]", nbinsPV, PVlow, PVup, 200, 0, 1000);
00343 hCaloSumET_profile = _dbe->bookProfile("METTask_CaloSumET_profile", "SumET [GeV]", nbinsPV, PVlow, PVup, 400, 0, 4000);
00344
00345
00346
00347
00348 hCaloMEx_profile ->setAxisTitle("nvtx", 1);
00349 hCaloMEy_profile ->setAxisTitle("nvtx", 1);
00350 hCaloMET_profile ->setAxisTitle("nvtx", 1);
00351 hCaloMETNoHF_profile->setAxisTitle("nvtx", 1);
00352 hCaloSumET_profile ->setAxisTitle("nvtx", 1);
00353
00354
00355 if (_allhist){
00356 if (bLumiSecPlot){
00357 hCaloMExLS = _dbe->book2D("METTask_CaloMEx_LS","METTask_CaloMEx_LS",200,-200,200,50,0.,500.);
00358 hCaloMExLS->setAxisTitle("MEx [GeV]",1);
00359 hCaloMExLS->setAxisTitle("Lumi Section",2);
00360 hCaloMEyLS = _dbe->book2D("METTask_CaloMEy_LS","METTask_CaloMEy_LS",200,-200,200,50,0.,500.);
00361 hCaloMEyLS->setAxisTitle("MEy [GeV]",1);
00362 hCaloMEyLS->setAxisTitle("Lumi Section",2);
00363 }
00364
00365
00366
00367
00368
00369 hCaloEtFractionHadronic = _dbe->book1D("METTask_CaloEtFractionHadronic","METTask_CaloEtFractionHadronic",100,0,1);
00370 hCaloEtFractionHadronic->setAxisTitle("Hadronic Et Fraction",1);
00371 hCaloEmEtFraction = _dbe->book1D("METTask_CaloEmEtFraction", "METTask_CaloEmEtFraction" ,100,0,1);
00372 hCaloEmEtFraction->setAxisTitle("EM Et Fraction",1);
00373
00374
00375
00376
00377
00378 hCaloEmEtFraction020 = _dbe->book1D("METTask_CaloEmEtFraction020", "METTask_CaloEmEtFraction020" ,100,0,1);
00379 hCaloEmEtFraction020->setAxisTitle("EM Et Fraction (MET>20 GeV)",1);
00380 }
00381
00382 if (theCaloMETCollectionLabel.label() == "corMetGlobalMuons" ) {
00383 hCalomuPt = _dbe->book1D("METTask_CalomuonPt", "METTask_CalomuonPt", 50, 0, 500);
00384 hCalomuEta = _dbe->book1D("METTask_CalomuonEta", "METTask_CalomuonEta", 60, -3.0, 3.0);
00385 hCalomuNhits = _dbe->book1D("METTask_CalomuonNhits", "METTask_CalomuonNhits", 50, 0, 50);
00386 hCalomuChi2 = _dbe->book1D("METTask_CalomuonNormalizedChi2", "METTask_CalomuonNormalizedChi2", 20, 0, 20);
00387 hCalomuD0 = _dbe->book1D("METTask_CalomuonD0", "METTask_CalomuonD0", 50, -1, 1);
00388 hCaloMExCorrection = _dbe->book1D("METTask_CaloMExCorrection", "METTask_CaloMExCorrection", 100, -500.0,500.0);
00389 hCaloMEyCorrection = _dbe->book1D("METTask_CaloMEyCorrection", "METTask_CaloMEyCorrection", 100, -500.0,500.0);
00390 hCaloMuonCorrectionFlag = _dbe->book1D("METTask_CaloCorrectionFlag","METTask_CaloCorrectionFlag", 5, -0.5, 4.5);
00391 }
00392
00393 }
00394
00395
00396 void CaloMETAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup)
00397 {
00398 if ( _HighPtJetEventFlag->on() ) _HighPtJetEventFlag->initRun( iRun, iSetup );
00399 if ( _LowPtJetEventFlag ->on() ) _LowPtJetEventFlag ->initRun( iRun, iSetup );
00400 if ( _MinBiasEventFlag ->on() ) _MinBiasEventFlag ->initRun( iRun, iSetup );
00401 if ( _HighMETEventFlag ->on() ) _HighMETEventFlag ->initRun( iRun, iSetup );
00402
00403 if ( _EleEventFlag ->on() ) _EleEventFlag ->initRun( iRun, iSetup );
00404 if ( _MuonEventFlag ->on() ) _MuonEventFlag ->initRun( iRun, iSetup );
00405
00406 if (_HighPtJetEventFlag->on() && _HighPtJetEventFlag->expressionsFromDB(_HighPtJetEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00407 highPtJetExpr_ = _HighPtJetEventFlag->expressionsFromDB(_HighPtJetEventFlag->hltDBKey(), iSetup);
00408 if (_LowPtJetEventFlag->on() && _LowPtJetEventFlag->expressionsFromDB(_LowPtJetEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00409 lowPtJetExpr_ = _LowPtJetEventFlag->expressionsFromDB(_LowPtJetEventFlag->hltDBKey(), iSetup);
00410 if (_HighMETEventFlag->on() && _HighMETEventFlag->expressionsFromDB(_HighMETEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00411 highMETExpr_ = _HighMETEventFlag->expressionsFromDB(_HighMETEventFlag->hltDBKey(), iSetup);
00412
00413
00414 if (_MuonEventFlag->on() && _MuonEventFlag->expressionsFromDB(_MuonEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00415 muonExpr_ = _MuonEventFlag->expressionsFromDB(_MuonEventFlag->hltDBKey(), iSetup);
00416 if (_EleEventFlag->on() && _EleEventFlag->expressionsFromDB(_EleEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00417 elecExpr_ = _EleEventFlag->expressionsFromDB(_EleEventFlag->hltDBKey(), iSetup);
00418 if (_MinBiasEventFlag->on() && _MinBiasEventFlag->expressionsFromDB(_MinBiasEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00419 minbiasExpr_ = _MinBiasEventFlag->expressionsFromDB(_MinBiasEventFlag->hltDBKey(), iSetup);
00420
00421 }
00422
00423
00424
00425 void CaloMETAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup, DQMStore * dbe)
00426 {
00427
00428
00429
00430
00431 std::string dirName = "JetMET/MET/"+_source+"/";
00432 _dbe->setCurrentFolder(dirName);
00433
00434 TH1F* tlumisec;
00435
00436 MonitorElement *meLumiSec = _dbe->get("aaa");
00437 meLumiSec = _dbe->get("JetMET/lumisec");
00438
00439 int totlsec=0;
00440 double totltime=0.;
00441 if ( meLumiSec->getRootObject() ) {
00442 tlumisec = meLumiSec->getTH1F();
00443 for (int i=0; i<500; i++){
00444 if (tlumisec->GetBinContent(i+1)) totlsec++;
00445 }
00446 totltime = double(totlsec*90);
00447 }
00448
00449 if (totltime==0.) totltime=1.;
00450
00451
00452
00453
00454 for (std::vector<std::string>::const_iterator ic = _FolderNames.begin(); ic != _FolderNames.end(); ic++)
00455 {
00456
00457 std::string DirName;
00458 DirName = dirName+*ic;
00459
00460 makeRatePlot(DirName,totltime);
00461 if ( _HighPtJetEventFlag->on() )
00462 makeRatePlot(DirName+"/"+"triggerName_HighJetPt",totltime);
00463 if ( _LowPtJetEventFlag->on() )
00464 makeRatePlot(DirName+"/"+"triggerName_LowJetPt",totltime);
00465 if ( _MinBiasEventFlag->on() )
00466 makeRatePlot(DirName+"/"+"triggerName_MinBias",totltime);
00467 if ( _HighMETEventFlag->on() )
00468 makeRatePlot(DirName+"/"+"triggerName_HighMET",totltime);
00469
00470
00471 if ( _EleEventFlag->on() )
00472 makeRatePlot(DirName+"/"+"triggerName_Ele",totltime);
00473 if ( _MuonEventFlag->on() )
00474 makeRatePlot(DirName+"/"+"triggerName_Muon",totltime);
00475 }
00476 }
00477
00478
00479
00480 void CaloMETAnalyzer::makeRatePlot(std::string DirName, double totltime)
00481 {
00482
00483 _dbe->setCurrentFolder(DirName);
00484 MonitorElement *meCaloMET = _dbe->get(DirName+"/"+"METTask_CaloMET");
00485
00486 TH1F* tCaloMET;
00487 TH1F* tCaloMETRate;
00488
00489 if ( meCaloMET )
00490 if ( meCaloMET->getRootObject() ) {
00491 tCaloMET = meCaloMET->getTH1F();
00492
00493
00494 tCaloMETRate = (TH1F*) tCaloMET->Clone("METTask_CaloMETRate");
00495 for (int i = tCaloMETRate->GetNbinsX()-1; i>=0; i--){
00496 tCaloMETRate->SetBinContent(i+1,tCaloMETRate->GetBinContent(i+2)+tCaloMET->GetBinContent(i+1));
00497 }
00498 for (int i = 0; i<tCaloMETRate->GetNbinsX(); i++){
00499 tCaloMETRate->SetBinContent(i+1,tCaloMETRate->GetBinContent(i+1)/double(totltime));
00500 }
00501
00502 tCaloMETRate->SetName("METTask_CaloMETRate");
00503 tCaloMETRate->SetTitle("METTask_CaloMETRate");
00504 hCaloMETRate = _dbe->book1D("METTask_CaloMETRate",tCaloMETRate);
00505 hCaloMETRate->setAxisTitle("MET Threshold [GeV]",1);
00506 }
00507 }
00508
00509
00510
00511 void CaloMETAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup,
00512 const edm::TriggerResults& triggerResults) {
00513
00514 if (_verbose) std::cout << "CaloMETAnalyzer analyze" << std::endl;
00515
00516 std::string DirName = "JetMET/MET/"+_source;
00517 if (_print){
00518 std::cout << " " << std::endl;
00519 std::cout << "Event = " << iEvent.id().event() << std::endl;
00520 }
00521
00522 LogTrace(metname)<<"[CaloMETAnalyzer] Analyze CaloMET";
00523
00524 hmetME->Fill(1);
00525
00526
00527
00528
00529 _trig_JetMB=0;
00530 _trig_HighPtJet=0;
00531 _trig_LowPtJet=0;
00532 _trig_MinBias=0;
00533 _trig_HighMET=0;
00534
00535 _trig_Ele=0;
00536 _trig_Muon=0;
00537 _trig_PhysDec=0;
00538 if(&triggerResults) {
00539
00541
00542
00543
00544
00545 int ntrigs = triggerResults.size();
00546 if (_verbose) std::cout << "ntrigs=" << ntrigs << std::endl;
00547
00548
00549
00550
00551 const edm::TriggerNames & triggerNames = iEvent.triggerNames(triggerResults);
00552
00553
00554
00555 const unsigned int nTrig(triggerNames.size());
00556 for (unsigned int i=0;i<nTrig;++i)
00557 {
00558 if (triggerNames.triggerName(i).find(highPtJetExpr_[0].substr(0,highPtJetExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00559 _trig_HighPtJet=true;
00560 else if (triggerNames.triggerName(i).find(lowPtJetExpr_[0].substr(0,lowPtJetExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00561 _trig_LowPtJet=true;
00562 else if (triggerNames.triggerName(i).find(highMETExpr_[0].substr(0,highMETExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00563 _trig_HighMET=true;
00564
00565
00566 else if (triggerNames.triggerName(i).find(muonExpr_[0].substr(0,muonExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00567 _trig_Muon=true;
00568 else if (triggerNames.triggerName(i).find(elecExpr_[0].substr(0,elecExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00569 _trig_Ele=true;
00570 else if (triggerNames.triggerName(i).find(minbiasExpr_[0].substr(0,minbiasExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00571 _trig_MinBias=true;
00572 }
00573
00574
00575 for (unsigned int i=0; i!=HLTPathsJetMBByName_.size(); i++) {
00576 unsigned int triggerIndex = triggerNames.triggerIndex(HLTPathsJetMBByName_[i]);
00577 if (triggerIndex<triggerResults.size()) {
00578 if (triggerResults.accept(triggerIndex)) {
00579 _trig_JetMB++;
00580 }
00581 }
00582 }
00583
00584 if (HLTPathsJetMBByName_.size()==0) _trig_JetMB=triggerResults.size()-1;
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609 if (triggerNames.triggerIndex(_hlt_PhysDec) != triggerNames.size() &&
00610 triggerResults.accept(triggerNames.triggerIndex(_hlt_PhysDec))) _trig_PhysDec=1;
00611 } else {
00612
00613 edm::LogInfo("CaloMetAnalyzer") << "TriggerResults::HLT not found, "
00614 "automatically select events";
00615
00616
00617 _trig_JetMB=1;
00618
00619 }
00620
00621
00622
00623
00624
00625 edm::Handle<reco::CaloMETCollection> calometcoll;
00626 iEvent.getByLabel(theCaloMETCollectionLabel, calometcoll);
00627
00628 if(!calometcoll.isValid()) {
00629 std::cout<<"Unable to find MET results for CaloMET collection "<<theCaloMETCollectionLabel<<std::endl;
00630 return;
00631 }
00632
00633 const reco::CaloMETCollection *calometcol = calometcoll.product();
00634 const reco::CaloMET *calomet;
00635 calomet = &(calometcol->front());
00636
00637 LogTrace(metname)<<"[CaloMETAnalyzer] Call to the CaloMET analyzer";
00638
00639
00640 edm::Handle<reco::CaloMETCollection> calometnohfcoll;
00641 iEvent.getByLabel("metNoHF", calometnohfcoll);
00642
00643 if(!calometnohfcoll.isValid()) {
00644 std::cout<<"Unable to find MET results for CaloMETNoHF collection metNoHF"<<std::endl;
00645 return;
00646 }
00647
00648 const reco::CaloMETCollection *calometnohfcol = calometnohfcoll.product();
00649 const reco::CaloMET *calometnohf;
00650 calometnohf = &(calometnohfcol->front());
00651
00652
00653
00654
00655 if (theCaloMETCollectionLabel.label() == "corMetGlobalMuons" ) {
00656
00657 iEvent.getByLabel("muonMETValueMapProducer" , "muCorrData", corMetGlobalMuons_ValueMap_Handle);
00658 iEvent.getByLabel("muons", muon_h);
00659 iEvent.getByLabel(inputBeamSpotLabel, beamSpot_h);
00660
00661 if(!beamSpot_h.isValid()) edm::LogInfo("OutputInfo") << "falied to retrieve beam spot data require by MET Task";
00662
00663 bspot = ( beamSpot_h.isValid() ) ? beamSpot_h->position() : math::XYZPoint(0, 0, 0);
00664
00665 }
00666
00667
00668
00669
00670 edm::Handle<reco::HcalNoiseRBXCollection> HRBXCollection;
00671 iEvent.getByLabel(HcalNoiseRBXCollectionTag,HRBXCollection);
00672 if (!HRBXCollection.isValid()) {
00673 LogDebug("") << "CaloMETAnalyzer: Could not find HcalNoiseRBX Collection" << std::endl;
00674 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find HcalNoiseRBX Collection" << std::endl;
00675 }
00676
00677 edm::Handle<HcalNoiseSummary> HNoiseSummary;
00678 iEvent.getByLabel(HcalNoiseSummaryTag,HNoiseSummary);
00679 if (!HNoiseSummary.isValid()) {
00680 LogDebug("") << "CaloMETAnalyzer: Could not find Hcal NoiseSummary product" << std::endl;
00681 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find Hcal NoiseSummary product" << std::endl;
00682 }
00683
00684 edm::Handle<reco::CaloJetCollection> caloJets;
00685 iEvent.getByLabel(theJetCollectionLabel, caloJets);
00686 if (!caloJets.isValid()) {
00687 LogDebug("") << "CaloMETAnalyzer: Could not find jet product" << std::endl;
00688 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find jet product" << std::endl;
00689 }
00690
00691 edm::Handle<edm::View<reco::Candidate> > towers;
00692 iEvent.getByLabel(theCaloTowersLabel, towers);
00693 if (!towers.isValid()) {
00694 LogDebug("") << "CaloMETAnalyzer: Could not find caltower product" << std::endl;
00695 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find caltower product" << std::endl;
00696 }
00697
00698
00699
00700
00701 if (_source=="CaloMET") validateMET(*calomet,towers);
00702
00703
00704
00705 if (_allhist) computeEmHaMET(towers);
00706
00707
00708
00709
00710 if (_verbose) std::cout << "JetID starts" << std::endl;
00711
00712
00713
00714
00715 bool bJetIDMinimal=true;
00716 int nj=0;
00717 for (reco::CaloJetCollection::const_iterator cal = caloJets->begin();
00718 cal!=caloJets->end(); ++cal){
00719 jetID->calculate(iEvent, *cal);
00720 if (_print && nj<=1) std::cout << "Jet pT = " << cal->pt() << " (GeV) "
00721 << " eta = " << cal->eta() << " "
00722 << " phi = " << cal->phi() << " "
00723 << " emf = " << cal->emEnergyFraction() << std::endl;
00724 nj++;
00725 if (cal->pt()>10.){
00726 if (fabs(cal->eta())<=2.6 &&
00727 cal->emEnergyFraction()<=0.01) bJetIDMinimal=false;
00728 }
00729 }
00730
00731
00732
00733
00734 bool bJetIDLoose=true;
00735 for (reco::CaloJetCollection::const_iterator cal = caloJets->begin();
00736 cal!=caloJets->end(); ++cal){
00737 jetID->calculate(iEvent, *cal);
00738 if (_verbose) std::cout << jetID->n90Hits() << " "
00739 << jetID->restrictedEMF() << " "
00740 << cal->pt() << std::endl;
00741 if (cal->pt()>10.){
00742
00743
00744 if (jetID->n90Hits()<2) bJetIDLoose=false;
00745 if (jetID->fHPD()>=0.98) bJetIDLoose=false;
00746
00747
00748 if (fabs(cal->eta())<2.55){
00749 if (cal->emEnergyFraction()<=0.01) bJetIDLoose=false;
00750 }
00751
00752 else {
00753 if (cal->emEnergyFraction()<=-0.9) bJetIDLoose=false;
00754 if (cal->pt()>80.){
00755 if (cal->emEnergyFraction()>= 1.0) bJetIDLoose=false;
00756 }
00757 }
00758 }
00759 }
00760
00761
00762
00763
00764 bool bJetIDTight=true;
00765 bJetIDTight=bJetIDLoose;
00766 for (reco::CaloJetCollection::const_iterator cal = caloJets->begin();
00767 cal!=caloJets->end(); ++cal){
00768 jetID->calculate(iEvent, *cal);
00769 if (cal->pt()>25.){
00770
00771
00772 if (jetID->fHPD()>=0.95) bJetIDTight=false;
00773
00774
00775 if (fabs(cal->eta())>=1.00 && fabs(cal->eta())<1.75){
00776 if (cal->pt()>80. && cal->emEnergyFraction()>=1.) bJetIDTight=false;
00777 }
00778
00779
00780 else if (fabs(cal->eta())>=1.75 && fabs(cal->eta())<2.55){
00781 if (cal->pt()>80. && cal->emEnergyFraction()>=1.) bJetIDTight=false;
00782 }
00783
00784
00785 else if (fabs(cal->eta())>=2.55 && fabs(cal->eta())<3.25){
00786 if (cal->pt()< 50. && cal->emEnergyFraction()<=-0.3) bJetIDTight=false;
00787 if (cal->pt()>=50. && cal->pt()< 80. && cal->emEnergyFraction()<=-0.2) bJetIDTight=false;
00788 if (cal->pt()>=80. && cal->pt()<340. && cal->emEnergyFraction()<=-0.1) bJetIDTight=false;
00789 if (cal->pt()>=340. && cal->emEnergyFraction()<=-0.1
00790 && cal->emEnergyFraction()>=0.95) bJetIDTight=false;
00791 }
00792
00793
00794 else if (fabs(cal->eta())>=3.25){
00795 if (cal->pt()< 50. && cal->emEnergyFraction()<=-0.3
00796 && cal->emEnergyFraction()>=0.90) bJetIDTight=false;
00797 if (cal->pt()>=50. && cal->pt()<130. && cal->emEnergyFraction()<=-0.2
00798 && cal->emEnergyFraction()>=0.80) bJetIDTight=false;
00799 if (cal->pt()>=130. && cal->emEnergyFraction()<=-0.1
00800 && cal->emEnergyFraction()>=0.70) bJetIDTight=false;
00801 }
00802 }
00803 }
00804
00805 if (_verbose) std::cout << "JetID ends" << std::endl;
00806
00807
00808
00809
00810 bool bHcalNoiseFilter = HNoiseSummary->passLooseNoiseFilter();
00811 bool bHcalNoiseFilterTight = HNoiseSummary->passTightNoiseFilter();
00812
00813 if (_verbose) std::cout << "HcalNoiseFilter Summary ends" << std::endl;
00814
00815
00816
00817 edm::Handle<reco::BeamHaloSummary> TheBeamHaloSummary ;
00818 iEvent.getByLabel(BeamHaloSummaryTag, TheBeamHaloSummary) ;
00819
00820 bool bBeamHaloIDTightPass = true;
00821 bool bBeamHaloIDLoosePass = true;
00822
00823 if(TheBeamHaloSummary.isValid()) {
00824
00825 const reco::BeamHaloSummary TheSummary = (*TheBeamHaloSummary.product() );
00826
00827
00828
00829
00830
00831
00832 if( TheSummary.EcalLooseHaloId() || TheSummary.HcalLooseHaloId() ||
00833 TheSummary.CSCLooseHaloId() || TheSummary.GlobalLooseHaloId() )
00834 bBeamHaloIDLoosePass = false;
00835
00836 if( TheSummary.EcalTightHaloId() || TheSummary.HcalTightHaloId() ||
00837 TheSummary.CSCTightHaloId() || TheSummary.GlobalTightHaloId() )
00838 bBeamHaloIDTightPass = false;
00839
00840 }
00841
00842 if (_verbose) std::cout << "BeamHaloSummary ends" << std::endl;
00843
00844
00845
00846
00847 _numPV = 0;
00848 bool bPrimaryVertex = true;
00849 if(_doPVCheck){
00850 bPrimaryVertex = false;
00851 Handle<reco::VertexCollection> vertexHandle;
00852
00853 iEvent.getByLabel(vertexTag, vertexHandle);
00854
00855 if (!vertexHandle.isValid()) {
00856 LogDebug("") << "CaloMETAnalyzer: Could not find vertex collection" << std::endl;
00857 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find vertex collection" << std::endl;
00858 }
00859
00860 if ( vertexHandle.isValid() ){
00861 reco::VertexCollection vertexCollection = *(vertexHandle.product());
00862 int vertex_number = vertexCollection.size();
00863 reco::VertexCollection::const_iterator v = vertexCollection.begin();
00864 for ( ; v != vertexCollection.end(); ++v) {
00865 double vertex_chi2 = v->normalizedChi2();
00866 double vertex_ndof = v->ndof();
00867 bool fakeVtx = v->isFake();
00868 double vertex_Z = v->z();
00869
00870 if ( !fakeVtx
00871 && vertex_number>=_nvtx_min
00872 && vertex_ndof >_vtxndof_min
00873 && vertex_chi2 <_vtxchi2_max
00874 && fabs(vertex_Z)<_vtxz_max ) {
00875 bPrimaryVertex = true;
00876 ++_numPV;
00877 }
00878 }
00879 }
00880 }
00881
00882
00883 edm::Handle< L1GlobalTriggerReadoutRecord > gtReadoutRecord;
00884 iEvent.getByLabel( gtTag, gtReadoutRecord);
00885
00886 if (!gtReadoutRecord.isValid()) {
00887 LogDebug("") << "CaloMETAnalyzer: Could not find GT readout record" << std::endl;
00888 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find GT readout record product" << std::endl;
00889 }
00890
00891 bool bTechTriggers = true;
00892 bool bTechTriggersAND = true;
00893 bool bTechTriggersOR = false;
00894 bool bTechTriggersNOT = false;
00895
00896 if (gtReadoutRecord.isValid()) {
00897 const TechnicalTriggerWord& technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord();
00898
00899 if (_techTrigsAND.size() == 0)
00900 bTechTriggersAND = true;
00901 else
00902 for (unsigned ttr = 0; ttr != _techTrigsAND.size(); ttr++) {
00903 bTechTriggersAND = bTechTriggersAND && technicalTriggerWordBeforeMask.at(_techTrigsAND.at(ttr));
00904 }
00905
00906 if (_techTrigsAND.size() == 0)
00907 bTechTriggersOR = true;
00908 else
00909 for (unsigned ttr = 0; ttr != _techTrigsOR.size(); ttr++) {
00910 bTechTriggersOR = bTechTriggersOR || technicalTriggerWordBeforeMask.at(_techTrigsOR.at(ttr));
00911 }
00912 if (_techTrigsNOT.size() == 0)
00913 bTechTriggersNOT = false;
00914 else
00915 for (unsigned ttr = 0; ttr != _techTrigsNOT.size(); ttr++) {
00916 bTechTriggersNOT = bTechTriggersNOT || technicalTriggerWordBeforeMask.at(_techTrigsNOT.at(ttr));
00917 }
00918 }
00919 else
00920 {
00921 bTechTriggersAND = true;
00922 bTechTriggersOR = true;
00923 bTechTriggersNOT = false;
00924 }
00925
00926 if (_techTrigsAND.size()==0)
00927 bTechTriggersAND = true;
00928 if (_techTrigsOR.size()==0)
00929 bTechTriggersOR = true;
00930 if (_techTrigsNOT.size()==0)
00931 bTechTriggersNOT = false;
00932
00933 bTechTriggers = bTechTriggersAND && bTechTriggersOR && !bTechTriggersNOT;
00934
00935
00936
00937
00938 bool bHcalNoise = bHcalNoiseFilter;
00939 bool bBeamHaloID = bBeamHaloIDLoosePass;
00940 bool bJetID = bJetIDMinimal;
00941
00942 bool bPhysicsDeclared = true;
00943 if(_doHLTPhysicsOn) bPhysicsDeclared =_trig_PhysDec;
00944
00945 if (_tightHcalFiltering) bHcalNoise = bHcalNoiseFilterTight;
00946 if (_tightBHFiltering) bBeamHaloID = bBeamHaloIDTightPass;
00947
00948 if (_tightJetIDFiltering==1) bJetID = bJetIDMinimal;
00949 else if (_tightJetIDFiltering==2) bJetID = bJetIDLoose;
00950 else if (_tightJetIDFiltering==3) bJetID = bJetIDTight;
00951 else if (_tightJetIDFiltering==-1) bJetID = true;
00952
00953 bool bBasicCleanup = bTechTriggers && bPrimaryVertex && bPhysicsDeclared;
00954 bool bExtraCleanup = bBasicCleanup && bHcalNoise && bJetID && bBeamHaloID;
00955
00956
00957
00958 for (std::vector<std::string>::const_iterator ic = _FolderNames.begin();
00959 ic != _FolderNames.end(); ic++){
00960 if (*ic=="All") fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00961 if (DCSFilter->filter(iEvent, iSetup)) {
00962 if (_cleanupSelection){
00963 if (*ic=="BasicCleanup" && bBasicCleanup) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00964 if (*ic=="ExtraCleanup" && bExtraCleanup) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00965 }
00966 if (_allSelection) {
00967 if (*ic=="HcalNoiseFilter" && bHcalNoiseFilter ) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00968 if (*ic=="HcalNoiseFilterTight" && bHcalNoiseFilterTight ) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00969 if (*ic=="JetIDMinimal" && bJetIDMinimal) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00970 if (*ic=="JetIDLoose" && bJetIDLoose) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00971 if (*ic=="JetIDTight" && bJetIDTight) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00972 if (*ic=="BeamHaloIDTightPass" && bBeamHaloIDTightPass) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00973 if (*ic=="BeamHaloIDLoosePass" && bBeamHaloIDLoosePass) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00974 if (*ic=="Triggers" && bTechTriggers) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00975 if (*ic=="PV" && bPrimaryVertex) fillMESet(iEvent, DirName+"/"+*ic, *calomet, *calometnohf);
00976 }
00977 }
00978 }
00979 }
00980
00981
00982 void CaloMETAnalyzer::computeEmHaMET(edm::Handle<edm::View<reco::Candidate> > towers)
00983 {
00984
00985 edm::View<reco::Candidate>::const_iterator towerCand = towers->begin();
00986
00987 double sum_em_et = 0.0;
00988 double sum_em_ex = 0.0;
00989 double sum_em_ey = 0.0;
00990 double sum_em_ez = 0.0;
00991
00992 double sum_ha_et = 0.0;
00993 double sum_ha_ex = 0.0;
00994 double sum_ha_ey = 0.0;
00995 double sum_ha_ez = 0.0;
00996
00997 for ( ; towerCand != towers->end(); towerCand++)
00998 {
00999 const reco::Candidate* candidate = &(*towerCand);
01000 if (candidate)
01001 {
01002 const CaloTower* calotower = dynamic_cast<const CaloTower*> (candidate);
01003 if (calotower){
01004 double Tower_ET = calotower->et();
01005 if (Tower_ET>0.3) {
01006
01007 double phi = candidate->phi();
01008 double theta = candidate->theta();
01009
01010 double e_em = calotower->emEnergy();
01011 double e_ha = calotower->hadEnergy();
01012 double et_em = e_em*sin(theta);
01013 double et_ha = e_ha*sin(theta);
01014
01015 sum_em_ez += e_em*cos(theta);
01016 sum_em_et += et_em;
01017 sum_em_ex += et_em*cos(phi);
01018 sum_em_ey += et_em*sin(phi);
01019
01020 sum_ha_ez += e_ha*cos(theta);
01021 sum_ha_et += et_ha;
01022 sum_ha_ex += et_ha*cos(phi);
01023 sum_ha_ey += et_ha*sin(phi);
01024
01025 }
01026 }
01027 }
01028 }
01029
01030
01031 _EmMEx = -sum_em_ex;
01032 _EmMEy = -sum_em_ey;
01033 _EmMET = pow(_EmMEx*_EmMEx+_EmMEy*_EmMEy,0.5);
01034 _EmCaloEz = sum_em_ez;
01035 _EmSumEt = sum_em_et;
01036 _EmMetPhi = atan2( _EmMEy, _EmMEx );
01037
01038 _HaMEx = -sum_ha_ex;
01039 _HaMEy = -sum_ha_ey;
01040 _HaMET = pow(_HaMEx*_HaMEx+_HaMEy*_HaMEy,0.5);
01041 _HaCaloEz = sum_ha_ez;
01042 _HaSumEt = sum_ha_et;
01043 _HaMetPhi = atan2( _HaMEy, _HaMEx );
01044
01045 }
01046
01047 void CaloMETAnalyzer::validateMET(const reco::CaloMET& calomet,
01048 edm::Handle<edm::View<reco::Candidate> > towers)
01049 {
01050
01051 edm::View<reco::Candidate>::const_iterator towerCand = towers->begin();
01052
01053 double sum_et = 0.0;
01054 double sum_ex = 0.0;
01055 double sum_ey = 0.0;
01056 double sum_ez = 0.0;
01057
01058 for ( ; towerCand != towers->end(); towerCand++)
01059 {
01060 const reco::Candidate* candidate = &(*towerCand);
01061 if (candidate)
01062 {
01063 const CaloTower* calotower = dynamic_cast<const CaloTower*> (candidate);
01064 if (calotower){
01065 double Tower_ET = calotower->et();
01066 if (Tower_ET>0.3) {
01067
01068 double phi = candidate->phi();
01069 double theta = candidate->theta();
01070 double e = candidate->energy();
01071 double et = e*sin(theta);
01072 sum_ez += e*cos(theta);
01073 sum_et += et;
01074 sum_ex += et*cos(phi);
01075 sum_ey += et*sin(phi);
01076
01077 }
01078 }
01079 }
01080 }
01081
01082 double Mex = -sum_ex;
01083 double Mey = -sum_ey;
01084
01085 double Met = sqrt( sum_ex*sum_ex + sum_ey*sum_ey );
01086 double Sumet = sum_et;
01087
01088
01089 if (_verbose){
01090 if (Sumet!=calomet.sumEt() || Mex!=calomet.px() || Mey!=calomet.py() || Met!=calomet.pt() ){
01091 std::cout << _source << std::endl;
01092 std::cout << "SUMET" << Sumet << " METBlock" << calomet.sumEt() << std::endl;
01093 std::cout << "MEX" << Mex << " METBlock" << calomet.px() << std::endl;
01094 std::cout << "MEY" << Mey << " METBlock" << calomet.py() << std::endl;
01095 std::cout << "MET" << Met << " METBlock" << calomet.pt() << std::endl;
01096 }
01097 }
01098
01099 if (_print){
01100 std::cout << "SUMET = " << calomet.sumEt() << " (GeV) "
01101 << "MEX" << calomet.px() << " (GeV) "
01102 << "MEY" << calomet.py() << " (GeV) "
01103 << "MET" << calomet.pt() << " (GeV) " << std::endl;
01104 }
01105
01106 }
01107
01108
01109 void CaloMETAnalyzer::fillMESet(const edm::Event& iEvent, std::string DirName,
01110 const reco::CaloMET& calomet,
01111 const reco::CaloMET& calometnohf)
01112 {
01113
01114 _dbe->setCurrentFolder(DirName);
01115
01116 bool bLumiSecPlot=false;
01117 if (DirName.find("All")) bLumiSecPlot=true;
01118
01119 if (_trig_JetMB)
01120 fillMonitorElement(iEvent,DirName,"",calomet,calometnohf, bLumiSecPlot);
01121 if (_trig_HighPtJet)
01122 fillMonitorElementTriggered(iEvent,DirName,"HighPtJet",calomet,calometnohf,false);
01123 if (_trig_LowPtJet)
01124 fillMonitorElementTriggered(iEvent,DirName,"LowPtJet",calomet,calometnohf,false);
01125 if (_trig_MinBias)
01126 fillMonitorElementTriggered(iEvent,DirName,"MinBias",calomet,calometnohf,false);
01127 if (_trig_HighMET)
01128 fillMonitorElementTriggered(iEvent,DirName,"HighMET",calomet,calometnohf,false);
01129
01130
01131 if (_trig_Ele)
01132 fillMonitorElementTriggered(iEvent,DirName,"Ele",calomet,calometnohf,false);
01133 if (_trig_Muon) {
01134 fillMonitorElementTriggered(iEvent,DirName,"Muon",calomet,calometnohf,false);
01135 }
01136 }
01137
01138
01139 void CaloMETAnalyzer::fillMonitorElement(const edm::Event& iEvent, std::string DirName,
01140 std::string TriggerTypeName,
01141 const reco::CaloMET& calomet,
01142 const reco::CaloMET& calometnohf,
01143 bool bLumiSecPlot)
01144 {
01145 fillMonitorElementTriggered(iEvent, DirName, TriggerTypeName, calomet, calometnohf, bLumiSecPlot);
01146
01147 double caloSumET = calomet.sumEt();
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165 double caloMaxEtInEMTowers = calomet.maxEtInEmTowers();
01166 double caloMaxEtInHadTowers = calomet.maxEtInHadTowers();
01167
01168 double caloHadEtInHB = calomet.hadEtInHB();
01169 double caloHadEtInHO = calomet.hadEtInHO();
01170 double caloHadEtInHE = calomet.hadEtInHE();
01171 double caloHadEtInHF = calomet.hadEtInHF();
01172 double caloEmEtInEB = calomet.emEtInEB();
01173 double caloEmEtInEE = calomet.emEtInEE();
01174 double caloEmEtInHF = calomet.emEtInHF();
01175
01176
01177
01178
01179
01180
01181 if (TriggerTypeName!="") DirName = DirName +"/"+TriggerTypeName;
01182
01183 if (_verbose) std::cout << "_etThreshold = " << _etThreshold << std::endl;
01184 if (caloSumET>_etThreshold){
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208 if (_allhist){
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222 hCaloMaxEtInEmTowers = _dbe->get(DirName+"/"+"METTask_CaloMaxEtInEmTowers"); if (hCaloMaxEtInEmTowers && hCaloMaxEtInEmTowers->getRootObject()) hCaloMaxEtInEmTowers->Fill(caloMaxEtInEMTowers);
01223 hCaloMaxEtInHadTowers = _dbe->get(DirName+"/"+"METTask_CaloMaxEtInHadTowers"); if (hCaloMaxEtInHadTowers && hCaloMaxEtInHadTowers->getRootObject()) hCaloMaxEtInHadTowers->Fill(caloMaxEtInHadTowers);
01224
01225 hCaloHadEtInHB = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHB"); if (hCaloHadEtInHB && hCaloHadEtInHB->getRootObject()) hCaloHadEtInHB->Fill(caloHadEtInHB);
01226 hCaloHadEtInHO = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHO"); if (hCaloHadEtInHO && hCaloHadEtInHO->getRootObject()) hCaloHadEtInHO->Fill(caloHadEtInHO);
01227 hCaloHadEtInHE = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHE"); if (hCaloHadEtInHE && hCaloHadEtInHE->getRootObject()) hCaloHadEtInHE->Fill(caloHadEtInHE);
01228 hCaloHadEtInHF = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHF"); if (hCaloHadEtInHF && hCaloHadEtInHF->getRootObject()) hCaloHadEtInHF->Fill(caloHadEtInHF);
01229 hCaloEmEtInEB = _dbe->get(DirName+"/"+"METTask_CaloEmEtInEB"); if (hCaloEmEtInEB && hCaloEmEtInEB->getRootObject()) hCaloEmEtInEB->Fill(caloEmEtInEB);
01230 hCaloEmEtInEE = _dbe->get(DirName+"/"+"METTask_CaloEmEtInEE"); if (hCaloEmEtInEE && hCaloEmEtInEE->getRootObject()) hCaloEmEtInEE->Fill(caloEmEtInEE);
01231 hCaloEmEtInHF = _dbe->get(DirName+"/"+"METTask_CaloEmEtInHF"); if (hCaloEmEtInHF && hCaloEmEtInHF->getRootObject()) hCaloEmEtInHF->Fill(caloEmEtInHF);
01232
01233 hCaloEmMEx = _dbe->get(DirName+"/"+"METTask_CaloEmMEx"); if (hCaloEmMEx && hCaloEmMEx->getRootObject()) hCaloEmMEx->Fill(_EmMEx);
01234 hCaloEmMEy = _dbe->get(DirName+"/"+"METTask_CaloEmMEy"); if (hCaloEmMEy && hCaloEmMEy->getRootObject()) hCaloEmMEy->Fill(_EmMEy);
01235
01236 hCaloEmMET = _dbe->get(DirName+"/"+"METTask_CaloEmMET"); if (hCaloEmMET && hCaloEmMET->getRootObject()) hCaloEmMET->Fill(_EmMET);
01237 hCaloEmMETPhi = _dbe->get(DirName+"/"+"METTask_CaloEmMETPhi"); if (hCaloEmMETPhi && hCaloEmMETPhi->getRootObject()) hCaloEmMETPhi->Fill(_EmMetPhi);
01238
01239
01240 hCaloHaMEx = _dbe->get(DirName+"/"+"METTask_CaloHaMEx"); if (hCaloHaMEx && hCaloHaMEx->getRootObject()) hCaloHaMEx->Fill(_HaMEx);
01241 hCaloHaMEy = _dbe->get(DirName+"/"+"METTask_CaloHaMEy"); if (hCaloHaMEy && hCaloHaMEy->getRootObject()) hCaloHaMEy->Fill(_HaMEy);
01242
01243 hCaloHaMET = _dbe->get(DirName+"/"+"METTask_CaloHaMET"); if (hCaloHaMET && hCaloHaMET->getRootObject()) hCaloHaMET->Fill(_HaMET);
01244 hCaloHaMETPhi = _dbe->get(DirName+"/"+"METTask_CaloHaMETPhi"); if (hCaloHaMETPhi && hCaloHaMETPhi->getRootObject()) hCaloHaMETPhi->Fill(_HaMetPhi);
01245
01246
01247 }
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271 }
01272
01273 }
01274
01275
01276 void CaloMETAnalyzer::fillMonitorElementTriggered(const edm::Event& iEvent, std::string DirName,
01277 std::string TriggerTypeName,
01278 const reco::CaloMET& calomet,
01279 const reco::CaloMET& calometnohf,
01280 bool bLumiSecPlot)
01281 {
01282
01283 if (TriggerTypeName=="HighPtJet") {
01284 if (!selectHighPtJetEvent(iEvent)) return;
01285 }
01286 else if (TriggerTypeName=="LowPtJet") {
01287 if (!selectLowPtJetEvent(iEvent)) return;
01288 }
01289 else if (TriggerTypeName=="HighMET") {
01290 if (calomet.pt()<_highMETThreshold) return;
01291 }
01292
01293
01294
01295 else if (TriggerTypeName=="Ele") {
01296 if (!selectWElectronEvent(iEvent)) return;
01297 }
01298 else if (TriggerTypeName=="Muon") {
01299 if (!selectWMuonEvent(iEvent)) return;
01300 }
01301
01302 double caloSumET = calomet.sumEt();
01303 double caloMETSig = calomet.mEtSig();
01304
01305 double caloMET = calomet.pt();
01306 double caloMEx = calomet.px();
01307 double caloMEy = calomet.py();
01308 double caloMETPhi = calomet.phi();
01309
01310 double caloMETNoHF = calometnohf.pt();
01311
01312
01313 if (_verbose) std::cout << _source << " " << caloMET << std::endl;
01314
01315 double caloEtFractionHadronic = calomet.etFractionHadronic();
01316 double caloEmEtFraction = calomet.emEtFraction();
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330 int myLuminosityBlock;
01331
01332 myLuminosityBlock = iEvent.luminosityBlock();
01333
01334
01335 if (TriggerTypeName!="") DirName = DirName +"/"+TriggerTypeName;
01336
01337 if (_verbose) std::cout << "_etThreshold = " << _etThreshold << std::endl;
01338 if (caloSumET>_etThreshold){
01339 hCaloMEx = _dbe->get(DirName+"/"+"METTask_CaloMEx"); if (hCaloMEx && hCaloMEx->getRootObject() ) hCaloMEx->Fill(caloMEx);
01340 hCaloMEy = _dbe->get(DirName+"/"+"METTask_CaloMEy"); if (hCaloMEy && hCaloMEy->getRootObject() ) hCaloMEy->Fill(caloMEy);
01341 hCaloMET = _dbe->get(DirName+"/"+"METTask_CaloMET"); if (hCaloMET && hCaloMET->getRootObject() ) hCaloMET->Fill(caloMET);
01342 hCaloMET1 = _dbe->get(DirName+"/"+"METTask_CaloMET1"); if (hCaloMET1 && hCaloMET1->getRootObject() ) hCaloMET1->Fill(caloMET);
01343 hCaloMETPhi = _dbe->get(DirName+"/"+"METTask_CaloMETPhi"); if (hCaloMETPhi && hCaloMETPhi->getRootObject() ) hCaloMETPhi->Fill(caloMETPhi);
01344 hCaloSumET = _dbe->get(DirName+"/"+"METTask_CaloSumET"); if (hCaloSumET && hCaloSumET->getRootObject() ) hCaloSumET->Fill(caloSumET);
01345 hCaloMETSig = _dbe->get(DirName+"/"+"METTask_CaloMETSig"); if (hCaloMETSig && hCaloMETSig->getRootObject() ) hCaloMETSig->Fill(caloMETSig);
01346
01347
01348 hCaloMETNoHF = _dbe->get(DirName+"/"+"METTask_CaloMETNoHF"); if (hCaloMETNoHF && hCaloMETNoHF->getRootObject() ) hCaloMETNoHF->Fill(caloMETNoHF);
01349
01350 hCaloMET_logx = _dbe->get(DirName+"/"+"METTask_CaloMET_logx"); if (hCaloMET_logx && hCaloMET_logx->getRootObject() ) hCaloMET_logx->Fill(log10(caloMET));
01351 hCaloSumET_logx = _dbe->get(DirName+"/"+"METTask_CaloSumET_logx"); if (hCaloSumET_logx && hCaloSumET_logx->getRootObject() ) hCaloSumET_logx->Fill(log10(caloSumET));
01352
01353
01354
01355
01356 hCaloMEx_profile = _dbe->get(DirName + "/METTask_CaloMEx_profile");
01357 hCaloMEy_profile = _dbe->get(DirName + "/METTask_CaloMEy_profile");
01358 hCaloMET_profile = _dbe->get(DirName + "/METTask_CaloMET_profile");
01359 hCaloMETNoHF_profile = _dbe->get(DirName + "/METTask_CaloMETNoHF_profile");
01360 hCaloSumET_profile = _dbe->get(DirName + "/METTask_CaloSumET_profile");
01361
01362 if (hCaloMEx_profile && hCaloMEx_profile ->getRootObject()) hCaloMEx_profile ->Fill(_numPV, caloMEx);
01363 if (hCaloMEy_profile && hCaloMEy_profile ->getRootObject()) hCaloMEy_profile ->Fill(_numPV, caloMEy);
01364 if (hCaloMET_profile && hCaloMET_profile ->getRootObject()) hCaloMET_profile ->Fill(_numPV, caloMET);
01365 if (hCaloMETNoHF_profile && hCaloMETNoHF_profile->getRootObject()) hCaloMETNoHF_profile->Fill(_numPV, caloMETNoHF);
01366 if (hCaloSumET_profile && hCaloSumET_profile ->getRootObject()) hCaloSumET_profile ->Fill(_numPV, caloSumET);
01367
01368
01369
01370
01371
01372
01373
01374
01375 hCaloMETPhi020 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi020"); if (caloMET> 20. && hCaloMETPhi020 && hCaloMETPhi020->getRootObject()) { hCaloMETPhi020->Fill(caloMETPhi);}
01376
01377 if (_allhist){
01378 if (bLumiSecPlot){
01379 hCaloMExLS = _dbe->get(DirName+"/"+"METTask_CaloMEx_LS"); if (hCaloMExLS && hCaloMExLS->getRootObject()) hCaloMExLS->Fill(caloMEx,myLuminosityBlock);
01380 hCaloMEyLS = _dbe->get(DirName+"/"+"METTask_CaloMEy_LS"); if (hCaloMEyLS && hCaloMEyLS->getRootObject()) hCaloMEyLS->Fill(caloMEy,myLuminosityBlock);
01381 }
01382
01383 hCaloEtFractionHadronic = _dbe->get(DirName+"/"+"METTask_CaloEtFractionHadronic"); if (hCaloEtFractionHadronic && hCaloEtFractionHadronic->getRootObject()) hCaloEtFractionHadronic->Fill(caloEtFractionHadronic);
01384 hCaloEmEtFraction = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction"); if (hCaloEmEtFraction && hCaloEmEtFraction->getRootObject()) hCaloEmEtFraction->Fill(caloEmEtFraction);
01385
01386
01387
01388 hCaloEmEtFraction020 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction020"); if (caloMET> 20. && hCaloEmEtFraction020 && hCaloEmEtFraction020->getRootObject()) hCaloEmEtFraction020->Fill(caloEmEtFraction);
01389
01390
01391
01392
01393
01394
01395
01396
01397
01398
01399
01400
01401
01402
01404
01405
01407
01408
01409
01411
01412
01414
01415 }
01416 if (theCaloMETCollectionLabel.label() == "corMetGlobalMuons" ) {
01417
01418 for( reco::MuonCollection::const_iterator muonit = muon_h->begin(); muonit != muon_h->end(); muonit++ ) {
01419 const reco::TrackRef siTrack = muonit->innerTrack();
01420 hCalomuPt = _dbe->get(DirName+"/"+"METTask_CalomuPt"); if (hCalomuPt && hCalomuPt->getRootObject()) hCalomuPt->Fill( muonit->p4().pt() );
01421 hCalomuEta = _dbe->get(DirName+"/"+"METTask_CalomuEta"); if (hCalomuEta && hCalomuEta->getRootObject()) hCalomuEta->Fill( muonit->p4().eta() );
01422 hCalomuNhits = _dbe->get(DirName+"/"+"METTask_CalomuNhits"); if (hCalomuNhits && hCalomuNhits->getRootObject()) hCalomuNhits->Fill( siTrack.isNonnull() ? siTrack->numberOfValidHits() : -999 );
01423 hCalomuChi2 = _dbe->get(DirName+"/"+"METTask_CalomuChi2"); if (hCalomuChi2 && hCalomuChi2->getRootObject()) hCalomuChi2->Fill( siTrack.isNonnull() ? siTrack->chi2()/siTrack->ndof() : -999 );
01424 double d0 = siTrack.isNonnull() ? -1 * siTrack->dxy( bspot) : -999;
01425 hCalomuD0 = _dbe->get(DirName+"/"+"METTask_CalomuD0"); if (hCalomuD0 && hCalomuD0->getRootObject()) hCalomuD0->Fill( d0 );
01426 }
01427
01428 const unsigned int nMuons = muon_h->size();
01429 for( unsigned int mus = 0; mus < nMuons; mus++ ) {
01430 reco::MuonRef muref( muon_h, mus);
01431 reco::MuonMETCorrectionData muCorrData = (*corMetGlobalMuons_ValueMap_Handle)[muref];
01432 hCaloMExCorrection = _dbe->get(DirName+"/"+"METTask_CaloMExCorrection"); if (hCaloMExCorrection && hCaloMExCorrection->getRootObject()) hCaloMExCorrection-> Fill(muCorrData.corrY());
01433 hCaloMEyCorrection = _dbe->get(DirName+"/"+"METTask_CaloMEyCorrection"); if (hCaloMEyCorrection && hCaloMEyCorrection->getRootObject()) hCaloMEyCorrection-> Fill(muCorrData.corrX());
01434 hCaloMuonCorrectionFlag = _dbe->get(DirName+"/"+"METTask_CaloMuonCorrectionFlag"); if (hCaloMuonCorrectionFlag && hCaloMuonCorrectionFlag->getRootObject()) hCaloMuonCorrectionFlag-> Fill(muCorrData.type());
01435 }
01436 }
01437 }
01438
01439 }
01440
01441
01442 bool CaloMETAnalyzer::selectHighPtJetEvent(const edm::Event& iEvent){
01443
01444 bool return_value=false;
01445
01446 edm::Handle<reco::CaloJetCollection> caloJets;
01447 iEvent.getByLabel(theJetCollectionLabel, caloJets);
01448 if (!caloJets.isValid()) {
01449 LogDebug("") << "CaloMETAnalyzer: Could not find jet product" << std::endl;
01450 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find jet product" << std::endl;
01451 }
01452
01453 for (reco::CaloJetCollection::const_iterator cal = caloJets->begin();
01454 cal!=caloJets->end(); ++cal){
01455 if (cal->pt()>_highPtJetThreshold){
01456 return_value=true;
01457 }
01458 }
01459
01460 return return_value;
01461
01462 }
01463
01464
01465 bool CaloMETAnalyzer::selectLowPtJetEvent(const edm::Event& iEvent){
01466
01467 bool return_value=false;
01468
01469 edm::Handle<reco::CaloJetCollection> caloJets;
01470 iEvent.getByLabel(theJetCollectionLabel, caloJets);
01471 if (!caloJets.isValid()) {
01472 LogDebug("") << "CaloMETAnalyzer: Could not find jet product" << std::endl;
01473 if (_verbose) std::cout << "CaloMETAnalyzer: Could not find jet product" << std::endl;
01474 }
01475
01476 for (reco::CaloJetCollection::const_iterator cal = caloJets->begin();
01477 cal!=caloJets->end(); ++cal){
01478 if (cal->pt()>_lowPtJetThreshold){
01479 return_value=true;
01480 }
01481 }
01482
01483 return return_value;
01484
01485 }
01486
01487
01488 bool CaloMETAnalyzer::selectWElectronEvent(const edm::Event& iEvent){
01489
01490 bool return_value=true;
01491
01492
01493
01494
01495
01496 return return_value;
01497
01498 }
01499
01500
01501 bool CaloMETAnalyzer::selectWMuonEvent(const edm::Event& iEvent){
01502
01503 bool return_value=true;
01504
01505
01506
01507
01508
01509 return return_value;
01510
01511 }
01512