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