CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_1/src/DQMOffline/JetMET/src/CaloMETAnalyzer.cc

Go to the documentation of this file.
00001 /*
00002  *  See header file for a description of this class.
00003  *
00004  *  $Date: 2012/05/14 09:02:47 $
00005  *  $Revision: 1.71 $
00006  *  \author F. Chlebana - Fermilab
00007  *          K. Hatakeyama - Rockefeller University
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   //genericTriggerEventFlag_( new GenericTriggerEventFlag( conf_ ) );
00046   _HighPtJetEventFlag = new GenericTriggerEventFlag( highptjetparms );
00047   _LowPtJetEventFlag  = new GenericTriggerEventFlag( lowptjetparms  );
00048   _MinBiasEventFlag   = new GenericTriggerEventFlag( minbiasparms   );
00049   _HighMETEventFlag   = new GenericTriggerEventFlag( highmetparms   );
00050   //  _LowMETEventFlag    = new GenericTriggerEventFlag( lowmetparms    );
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   //  lowMETExpr_    = lowmetparms   .getParameter<std::vector<std::string> >("hltPaths");
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   //  delete _LowMETEventFlag;
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   // trigger information
00084   HLTPathsJetMBByName_ = parameters.getParameter<std::vector<std::string > >("HLTPathsJetMB");
00085 
00086   theCleaningParameters = parameters.getParameter<ParameterSet>("CleaningParameters"),
00087 
00088   //Trigger parameters
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   //DCS information
00103   // ==========================================================
00104   DCSFilter = new JetMETDQMDCSFilter(parameters.getParameter<ParameterSet>("DCSFilter"));
00105 
00106   //Vertex requirements
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   // CaloMET information
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   // Other data collections
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   // misc
00135   _verbose     = parameters.getParameter<int>("verbose");
00136   _print       = parameters.getParameter<int>("printOut");
00137   _etThreshold = parameters.getParameter<double>("etThreshold"); // MET threshold
00138   _allhist     = parameters.getParameter<bool>("allHist");       // Full set of monitoring histograms
00139   _allSelection= parameters.getParameter<bool>("allSelection");  // Plot with all sets of event selection
00140   _cleanupSelection= parameters.getParameter<bool>("cleanupSelection");  // Plot with all sets of event selection
00141 
00142   _highPtJetThreshold = parameters.getParameter<double>("HighPtJetThreshold"); // High Pt Jet threshold
00143   _lowPtJetThreshold = parameters.getParameter<double>("LowPtJetThreshold"); // Low Pt Jet threshold
00144   _highMETThreshold = parameters.getParameter<double>("HighMETThreshold"); // High MET threshold
00145   //  _lowMETThreshold = parameters.getParameter<double>("LowMETThreshold"); // Low MET threshold
00146 
00147   //
00148   jetID = new reco::helper::JetIDHelper(parameters.getParameter<ParameterSet>("JetIDParams"));
00149 
00150   // DQStore stuff
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   //  if ( _LowMETEventFlag->on() ) {
00234   //    bookMonitorElementTriggered(DirName+"/"+"LowMET",false);
00235   //    hTriggerName_LowMET = _dbe->bookString("triggerName_LowMET", lowMETExpr_[0]);
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   // Book NPV profiles
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   // Set NPV profiles x-axis title
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     //hCaloMaxEtInEmTowers    = _dbe->book1D("METTask_CaloMaxEtInEmTowers",   "METTask_CaloMaxEtInEmTowers"   ,100,0,2000);
00366     //hCaloMaxEtInEmTowers->setAxisTitle("Et(Max) in EM Tower [GeV]",1);
00367     //hCaloMaxEtInHadTowers   = _dbe->book1D("METTask_CaloMaxEtInHadTowers",  "METTask_CaloMaxEtInHadTowers"  ,100,0,2000);
00368     //hCaloMaxEtInHadTowers->setAxisTitle("Et(Max) in Had Tower [GeV]",1);
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     //hCaloEmEtFraction002    = _dbe->book1D("METTask_CaloEmEtFraction002",   "METTask_CaloEmEtFraction002"      ,100,0,1);
00375     //hCaloEmEtFraction002->setAxisTitle("EM Et Fraction (MET>2 GeV)",1);
00376     //hCaloEmEtFraction010    = _dbe->book1D("METTask_CaloEmEtFraction010",   "METTask_CaloEmEtFraction010"      ,100,0,1);
00377     //hCaloEmEtFraction010->setAxisTitle("EM Et Fraction (MET>10 GeV)",1);
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   //  if ( _LowMETEventFlag   ->on() ) _LowMETEventFlag   ->initRun( iRun, iSetup );
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   //  if (_LowMETEventFlag->on() && _LowMETEventFlag->expressionsFromDB(_LowMETEventFlag->hltDBKey(), iSetup)[0] != "CONFIG_ERROR")
00413   //    lowMETExpr_    = _LowMETEventFlag->expressionsFromDB(_LowMETEventFlag->hltDBKey(),       iSetup);
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   //--- Check the time length of the Run from the lumi section plots
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); // one lumi sec ~ 90 (sec)
00447   }
00448 
00449   if (totltime==0.) totltime=1.; 
00450 
00451   //
00452   //--- Make the integrated plots with rate (Hz)
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       //      if ( _LowMETEventFlag->on() ) 
00470       //        makeRatePlot(DirName+"/"+"triggerName_LowMET",totltime);
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       // Integral plot & convert number of events to rate (hz)
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   // Trigger information 
00528   //
00529   _trig_JetMB=0;
00530   _trig_HighPtJet=0;
00531   _trig_LowPtJet=0;
00532   _trig_MinBias=0;
00533   _trig_HighMET=0;
00534   //  _trig_LowMET=0;
00535   _trig_Ele=0;
00536   _trig_Muon=0;
00537   _trig_PhysDec=0;
00538   if(&triggerResults) {   
00539     
00541     
00542     //
00543     //
00544     // Check how many HLT triggers are in triggerResults 
00545     int ntrigs = triggerResults.size();
00546     if (_verbose) std::cout << "ntrigs=" << ntrigs << std::endl;
00547     
00548     //
00549     //
00550     // If index=ntrigs, this HLT trigger doesn't exist in the HLT table for this data.
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         //        else if (triggerNames.triggerName(i).find(lowMETExpr_[0].substr(0,lowMETExpr_[0].rfind("_v")+2))!=std::string::npos && triggerResults.accept(i))
00565         //        _trig_LowMET=true;
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     // count number of requested Jet or MB HLT paths which have fired
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     // for empty input vectors (n==0), take all HLT triggers!
00584     if (HLTPathsJetMBByName_.size()==0) _trig_JetMB=triggerResults.size()-1;
00585 
00586     /*
00587       if ( _HighPtJetEventFlag->on() && _HighPtJetEventFlag->accept( iEvent, iSetup) )
00588       _trig_HighPtJet=1;
00589       
00590       if ( _LowPtJetEventFlag->on() && _LowPtJetEventFlag->accept( iEvent, iSetup) )
00591       _trig_LowPtJet=1;
00592       
00593       if ( _MinBiasEventFlag->on() && _MinBiasEventFlag->accept( iEvent, iSetup) )
00594       _trig_MinBias=1;
00595       
00596       if ( _HighMETEventFlag->on() && _HighMETEventFlag->accept( iEvent, iSetup) )
00597       _trig_HighMET=1;
00598       
00599       if ( _LowMETEventFlag->on() && _LowMETEventFlag->accept( iEvent, iSetup) )
00600       _trig_LowMET=1;
00601       
00602       if ( _EleEventFlag->on() && _EleEventFlag->accept( iEvent, iSetup) )
00603       _trig_Ele=1;
00604       
00605       if ( _MuonEventFlag->on() && _MuonEventFlag->accept( iEvent, iSetup) )
00606       _trig_Muon=1;
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     // TriggerResults object not found. Look at all events.    
00617     _trig_JetMB=1;
00618     
00619   }
00620   
00621   // ==========================================================  
00622   // CaloMET information
00623 
00624   // **** Get the MET container  
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   // **** Get the MET no HF container  
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   //LogTrace(metname)<<"[CaloMETAnalyzer] Call to the CaloMET analyzer";
00653 
00654   //Only for corMetGlobalMuons
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   // CaloMET sanity check
00700 
00701   if (_source=="CaloMET") validateMET(*calomet,towers);
00702 
00703   // ==========================================================
00704 
00705   if (_allhist) computeEmHaMET(towers);
00706     
00707   // ==========================================================
00708   // JetID 
00709 
00710   if (_verbose) std::cout << "JetID starts" << std::endl;
00711   
00712   //
00713   // --- Minimal cuts
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   // --- Loose cuts
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       // for all regions
00744       if (jetID->n90Hits()<2)  bJetIDLoose=false; 
00745       if (jetID->fHPD()>=0.98) bJetIDLoose=false; 
00746       //
00747       // for non-forward
00748       if (fabs(cal->eta())<2.55){
00749         if (cal->emEnergyFraction()<=0.01) bJetIDLoose=false; 
00750       }
00751       // for forward
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       } // forward vs non-forward
00758     }   // pt>10 GeV/c
00759   }     // calor-jets loop
00760 
00761   //
00762   // --- Tight cuts
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       // for all regions
00772       if (jetID->fHPD()>=0.95) bJetIDTight=false; 
00773       //
00774       // for 1.0<|eta|<1.75
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       // for 1.75<|eta|<2.55
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       // for 2.55<|eta|<3.25
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       // for 3.25<|eta|
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     }   // pt>10 GeV/c
00803   }     // calor-jets loop
00804   
00805   if (_verbose) std::cout << "JetID ends" << std::endl;
00806      
00807   // ==========================================================
00808   // HCAL Noise filter
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   // Get BeamHaloSummary
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     //   std::cout << TheSummary.EcalLooseHaloId() << " "
00828     //      << TheSummary.HcalLooseHaloId() << " "
00829     //      << TheSummary.CSCLooseHaloId()  << " "
00830     //      << TheSummary.GlobalLooseHaloId() << std::endl;
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   //Vertex information
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   // Reconstructed MET Information - fill MonitorElements
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   //std::string DirName = "JetMET/MET/"+_source;
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     } // DCS
00978   }
00979 } // CaloMETAnalyzer::analyze
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               //double e     = candidate->energy();
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             } // Et>0.5
01026           }   // calotower
01027         }     // candidate
01028     }         // loop
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             } // Et>0.5
01078           }   // calotower
01079         }     // candidate
01080     }         // loop
01081   
01082   double Mex   = -sum_ex;
01083   double Mey   = -sum_ey;
01084   //double Mez   = -sum_ez;
01085   double Met   = sqrt( sum_ex*sum_ex + sum_ey*sum_ey );
01086   double Sumet = sum_et;
01087   //double MetPhi   = atan2( -sum_ey, -sum_ex ); // since MET is now a candidate,
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   //  if (_trig_LowMET)
01130   //    fillMonitorElementTriggered(iEvent,DirName,"LowMET",calomet,calometnohf,false);
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   double caloMETSig = calomet.mEtSig();
01151   //double caloEz     = calomet.e_longitudinal();
01152   double caloMET    = calomet.pt();
01153   double caloMEx    = calomet.px();
01154   double caloMEy    = calomet.py();
01155   double caloMETPhi = calomet.phi();
01156 
01157   double caloMETNoHF    = calometnohf.pt();
01158   //double caloMETNoHFPhi = calometnohf.phi();
01159 
01160   if (_verbose) std::cout << _source << " " << caloMET << std::endl;
01161 
01162   double caloEtFractionHadronic = calomet.etFractionHadronic();
01163   double caloEmEtFraction       = calomet.emEtFraction();
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   //  int myLuminosityBlock;
01177   //  myLuminosityBlock = (evtCounter++)/1000;
01178   //  myLuminosityBlock = iEvent.luminosityBlock();
01179   //
01180 
01181   if (TriggerTypeName!="") DirName = DirName +"/"+TriggerTypeName;
01182 
01183   if (_verbose) std::cout << "_etThreshold = " << _etThreshold << std::endl;
01184   if (caloSumET>_etThreshold){
01185   /*
01186     hCaloMEx    = _dbe->get(DirName+"/"+"METTask_CaloMEx");    if (hCaloMEx     && hCaloMEx->getRootObject() )    hCaloMEx->Fill(caloMEx);
01187     hCaloMEy    = _dbe->get(DirName+"/"+"METTask_CaloMEy");    if (hCaloMEy     && hCaloMEy->getRootObject() )    hCaloMEy->Fill(caloMEy);
01188     hCaloMET    = _dbe->get(DirName+"/"+"METTask_CaloMET");    if (hCaloMET     && hCaloMET->getRootObject() )    hCaloMET->Fill(caloMET);
01189     hCaloMET1   = _dbe->get(DirName+"/"+"METTask_CaloMET1");   if (hCaloMET1    && hCaloMET1->getRootObject() )   hCaloMET1->Fill(caloMET);
01190     hCaloMETPhi = _dbe->get(DirName+"/"+"METTask_CaloMETPhi"); if (hCaloMETPhi  && hCaloMETPhi->getRootObject() ) hCaloMETPhi->Fill(caloMETPhi);
01191     hCaloSumET  = _dbe->get(DirName+"/"+"METTask_CaloSumET");  if (hCaloSumET   && hCaloSumET->getRootObject() )  hCaloSumET->Fill(caloSumET);
01192     hCaloMETSig = _dbe->get(DirName+"/"+"METTask_CaloMETSig"); if (hCaloMETSig  && hCaloMETSig->getRootObject() ) hCaloMETSig->Fill(caloMETSig);
01193     //hCaloEz     = _dbe->get(DirName+"/"+"METTask_CaloEz");     if (hCaloEz      && hCaloEz->getRootObject() )     hCaloEz->Fill(caloEz);
01194     
01195     hCaloMETNoHF    = _dbe->get(DirName+"/"+"METTask_CaloMETNoHF");    if (hCaloMETNoHF     && hCaloMETNoHF->getRootObject() )    hCaloMETNoHF->Fill(caloMETNoHF);
01196     
01197     hCaloMET_logx   = _dbe->get(DirName+"/"+"METTask_CaloMET_logx");      if (hCaloMET_logx    && hCaloMET_logx->getRootObject() )   hCaloMET_logx->Fill(log10(caloMET));
01198     hCaloSumET_logx = _dbe->get(DirName+"/"+"METTask_CaloSumET_logx");    if (hCaloSumET_logx  && hCaloSumET_logx->getRootObject() ) hCaloSumET_logx->Fill(log10(caloSumET));
01199     
01200     //  hCaloMETIonFeedbck = _dbe->get(DirName+"/"+"METTask_CaloMETIonFeedbck"); if (hCaloMETIonFeedbck  && hCaloMETIonFeedbck->getRootObject() ) hCaloMETIonFeedbck->Fill(caloMET);
01201     //  hCaloMETHPDNoise   = _dbe->get(DirName+"/"+"METTask_CaloMETHPDNoise");   if (hCaloMETHPDNoise    && hCaloMETHPDNoise->getRootObject() )   hCaloMETHPDNoise->Fill(caloMET);
01202 
01203     //hCaloMETPhi002 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi002");    if (caloMET>  2. && hCaloMETPhi002  &&  hCaloMETPhi002->getRootObject()) { hCaloMETPhi002->Fill(caloMETPhi);}
01204     //hCaloMETPhi010 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi010");    if (caloMET> 10. && hCaloMETPhi010  &&  hCaloMETPhi010->getRootObject()) { hCaloMETPhi010->Fill(caloMETPhi);}
01205     hCaloMETPhi020 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi020");    if (caloMET> 20. && hCaloMETPhi020  &&  hCaloMETPhi020->getRootObject()) { hCaloMETPhi020->Fill(caloMETPhi);}
01206   */
01207   
01208     if (_allhist){
01209       /*
01210       if (bLumiSecPlot){
01211         hCaloMExLS = _dbe->get(DirName+"/"+"METTask_CaloMEx_LS");   if (hCaloMExLS  &&  hCaloMExLS->getRootObject())    hCaloMExLS->Fill(caloMEx,myLuminosityBlock);
01212         hCaloMEyLS = _dbe->get(DirName+"/"+"METTask_CaloMEy_LS");   if (hCaloMEyLS  &&  hCaloMEyLS->getRootObject())    hCaloMEyLS->Fill(caloMEy,myLuminosityBlock);
01213       }
01214       hCaloEtFractionHadronic = _dbe->get(DirName+"/"+"METTask_CaloEtFractionHadronic"); if (hCaloEtFractionHadronic && hCaloEtFractionHadronic->getRootObject())  hCaloEtFractionHadronic->Fill(caloEtFractionHadronic);
01215       hCaloEmEtFraction       = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction");       if (hCaloEmEtFraction       && hCaloEmEtFraction->getRootObject())        hCaloEmEtFraction->Fill(caloEmEtFraction);
01216       
01217       //hCaloEmEtFraction002 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction002");       if (caloMET>  2.  &&  hCaloEmEtFraction002    && hCaloEmEtFraction002->getRootObject()) hCaloEmEtFraction002->Fill(caloEmEtFraction);
01218       //hCaloEmEtFraction010 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction010");       if (caloMET> 10.  &&  hCaloEmEtFraction010    && hCaloEmEtFraction010->getRootObject()) hCaloEmEtFraction010->Fill(caloEmEtFraction);
01219       hCaloEmEtFraction020 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction020");       if (caloMET> 20.  &&  hCaloEmEtFraction020    && hCaloEmEtFraction020->getRootObject()) hCaloEmEtFraction020->Fill(caloEmEtFraction);
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       //hCaloEmEz     = _dbe->get(DirName+"/"+"METTask_CaloEmEz");      if (hCaloEmEz     && hCaloEmEz->getRootObject())      hCaloEmEz->Fill(_EmCaloEz);
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       //hCaloEmSumET  = _dbe->get(DirName+"/"+"METTask_CaloEmSumET");   if (hCaloEmSumET  && hCaloEmSumET->getRootObject())   hCaloEmSumET->Fill(_EmSumEt);
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       //hCaloHaEz     = _dbe->get(DirName+"/"+"METTask_CaloHaEz");      if (hCaloHaEz     && hCaloHaEz->getRootObject())      hCaloHaEz->Fill(_HaCaloEz);
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       //hCaloHaSumET  = _dbe->get(DirName+"/"+"METTask_CaloHaSumET");   if (hCaloHaSumET  && hCaloHaSumET->getRootObject())   hCaloHaSumET->Fill(_HaSumEt);
01246 
01247     } // _allhist
01248     /*
01249     if (theCaloMETCollectionLabel.label() == "corMetGlobalMuons" ) {
01250 
01251       for( reco::MuonCollection::const_iterator muonit = muon_h->begin(); muonit != muon_h->end(); muonit++ ) {
01252         const reco::TrackRef siTrack = muonit->innerTrack();
01253         hCalomuPt    = _dbe->get(DirName+"/"+"METTask_CalomuPt");     if (hCalomuPt    && hCalomuPt->getRootObject())     hCalomuPt->Fill( muonit->p4().pt() );
01254         hCalomuEta   = _dbe->get(DirName+"/"+"METTask_CalomuEta");    if (hCalomuEta   && hCalomuEta->getRootObject())    hCalomuEta->Fill( muonit->p4().eta() );
01255         hCalomuNhits = _dbe->get(DirName+"/"+"METTask_CalomuNhits");  if (hCalomuNhits && hCalomuNhits->getRootObject())  hCalomuNhits->Fill( siTrack.isNonnull() ? siTrack->numberOfValidHits() : -999 );
01256         hCalomuChi2  = _dbe->get(DirName+"/"+"METTask_CalomuChi2");   if (hCalomuChi2  && hCalomuChi2->getRootObject())   hCalomuChi2->Fill( siTrack.isNonnull() ? siTrack->chi2()/siTrack->ndof() : -999 );
01257         double d0 = siTrack.isNonnull() ? -1 * siTrack->dxy( bspot) : -999;
01258         hCalomuD0    = _dbe->get(DirName+"/"+"METTask_CalomuD0");     if (hCalomuD0    && hCalomuD0->getRootObject())  hCalomuD0->Fill( d0 );
01259       }
01260       
01261       const unsigned int nMuons = muon_h->size();      
01262       for( unsigned int mus = 0; mus < nMuons; mus++ ) {
01263         reco::MuonRef muref( muon_h, mus);
01264         reco::MuonMETCorrectionData muCorrData = (*corMetGlobalMuons_ValueMap_Handle)[muref];
01265         hCaloMExCorrection      = _dbe->get(DirName+"/"+"METTask_CaloMExCorrection");       if (hCaloMExCorrection      && hCaloMExCorrection->getRootObject())       hCaloMExCorrection-> Fill(muCorrData.corrY());
01266         hCaloMEyCorrection      = _dbe->get(DirName+"/"+"METTask_CaloMEyCorrection");       if (hCaloMEyCorrection      && hCaloMEyCorrection->getRootObject())       hCaloMEyCorrection-> Fill(muCorrData.corrX());
01267         hCaloMuonCorrectionFlag = _dbe->get(DirName+"/"+"METTask_CaloMuonCorrectionFlag");  if (hCaloMuonCorrectionFlag && hCaloMuonCorrectionFlag->getRootObject())  hCaloMuonCorrectionFlag-> Fill(muCorrData.type());
01268       }
01269     }    
01270     */
01271   } // et threshold cut
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   //  else if (TriggerTypeName=="LowMET") {
01293   //    if (calomet.pt()<_lowMETThreshold) return;
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   //double caloEz     = calomet.e_longitudinal();
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   //double caloMETNoHFPhi = calometnohf.phi();
01312 
01313   if (_verbose) std::cout << _source << " " << caloMET << std::endl;
01314 
01315   double caloEtFractionHadronic = calomet.etFractionHadronic();
01316   double caloEmEtFraction       = calomet.emEtFraction();
01317 
01318   //double caloMaxEtInEMTowers    = calomet.maxEtInEmTowers();
01319   //double caloMaxEtInHadTowers   = calomet.maxEtInHadTowers();
01320 
01321   //double caloHadEtInHB = calomet.hadEtInHB();
01322   //double caloHadEtInHO = calomet.hadEtInHO();
01323   //double caloHadEtInHE = calomet.hadEtInHE();
01324   //double caloHadEtInHF = calomet.hadEtInHF();
01325   //double caloEmEtInEB  = calomet.emEtInEB();
01326   //double caloEmEtInEE  = calomet.emEtInEE();
01327   //double caloEmEtInHF  = calomet.emEtInHF();
01328 
01329   //
01330   int myLuminosityBlock;
01331   //  myLuminosityBlock = (evtCounter++)/1000;
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     //hCaloEz     = _dbe->get(DirName+"/"+"METTask_CaloEz");     if (hCaloEz      && hCaloEz->getRootObject() )     hCaloEz->Fill(caloEz);
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     // Fill NPV profiles
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     //hCaloEz     = _dbe->get(DirName+"/"+"METTask_CaloEz_profile");     if (hCaloEz      && hCaloEz_profile->getRootObject() )     hCaloEz_profile->Fill(caloEz);
01370     //  hCaloMETIonFeedbck = _dbe->get(DirName+"/"+"METTask_CaloMETIonFeedbck"); if (hCaloMETIonFeedbck  && hCaloMETIonFeedbck->getRootObject() ) hCaloMETIonFeedbck->Fill(caloMET);
01371     //  haloMETHPDNoise   = _dbe->get(DirName+"/"+"METTask_CaloMETHPDNoise");   if (hCaloMETHPDNoise    && hCaloMETHPDNoise->getRootObject() )   hCaloMETHPDNoise->Fill(caloMET);
01372 
01373     //hCaloMETPhi002 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi002");    if (caloMET>  2. && hCaloMETPhi002  &&  hCaloMETPhi002->getRootObject()) { hCaloMETPhi002->Fill(caloMETPhi);}
01374     //hCaloMETPhi010 = _dbe->get(DirName+"/"+"METTask_CaloMETPhi010");    if (caloMET> 10. && hCaloMETPhi010  &&  hCaloMETPhi010->getRootObject()) { hCaloMETPhi010->Fill(caloMETPhi);}
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       //hCaloEmEtFraction002 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction002");       if (caloMET>  2.  &&  hCaloEmEtFraction002    && hCaloEmEtFraction002->getRootObject()) hCaloEmEtFraction002->Fill(caloEmEtFraction);
01387       //hCaloEmEtFraction010 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction010");       if (caloMET> 10.  &&  hCaloEmEtFraction010    && hCaloEmEtFraction010->getRootObject()) hCaloEmEtFraction010->Fill(caloEmEtFraction);
01388       hCaloEmEtFraction020 = _dbe->get(DirName+"/"+"METTask_CaloEmEtFraction020");       if (caloMET> 20.  &&  hCaloEmEtFraction020    && hCaloEmEtFraction020->getRootObject()) hCaloEmEtFraction020->Fill(caloEmEtFraction);
01389 
01390       //hCaloMaxEtInEmTowers  = _dbe->get(DirName+"/"+"METTask_CaloMaxEtInEmTowers");   if (hCaloMaxEtInEmTowers  && hCaloMaxEtInEmTowers->getRootObject())   hCaloMaxEtInEmTowers->Fill(caloMaxEtInEMTowers);
01391       //hCaloMaxEtInHadTowers = _dbe->get(DirName+"/"+"METTask_CaloMaxEtInHadTowers");  if (hCaloMaxEtInHadTowers && hCaloMaxEtInHadTowers->getRootObject())  hCaloMaxEtInHadTowers->Fill(caloMaxEtInHadTowers);
01392       //
01393       //hCaloHadEtInHB = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHB");  if (hCaloHadEtInHB  &&  hCaloHadEtInHB->getRootObject())  hCaloHadEtInHB->Fill(caloHadEtInHB);
01394       //hCaloHadEtInHO = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHO");  if (hCaloHadEtInHO  &&  hCaloHadEtInHO->getRootObject())  hCaloHadEtInHO->Fill(caloHadEtInHO);
01395       //hCaloHadEtInHE = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHE");  if (hCaloHadEtInHE  &&  hCaloHadEtInHE->getRootObject())  hCaloHadEtInHE->Fill(caloHadEtInHE);
01396       //hCaloHadEtInHF = _dbe->get(DirName+"/"+"METTask_CaloHadEtInHF");  if (hCaloHadEtInHF  &&  hCaloHadEtInHF->getRootObject())  hCaloHadEtInHF->Fill(caloHadEtInHF);
01397       //hCaloEmEtInEB  = _dbe->get(DirName+"/"+"METTask_CaloEmEtInEB");   if (hCaloEmEtInEB   &&  hCaloEmEtInEB->getRootObject())   hCaloEmEtInEB->Fill(caloEmEtInEB);
01398       //hCaloEmEtInEE  = _dbe->get(DirName+"/"+"METTask_CaloEmEtInEE");   if (hCaloEmEtInEE   &&  hCaloEmEtInEE->getRootObject())   hCaloEmEtInEE->Fill(caloEmEtInEE);
01399       //hCaloEmEtInHF  = _dbe->get(DirName+"/"+"METTask_CaloEmEtInHF");   if (hCaloEmEtInHF   &&  hCaloEmEtInHF->getRootObject())   hCaloEmEtInHF->Fill(caloEmEtInHF);
01400       //
01401       //hCaloEmMEx    = _dbe->get(DirName+"/"+"METTask_CaloEmMEx");     if (hCaloEmMEx    && hCaloEmMEx->getRootObject())     hCaloEmMEx->Fill(_EmMEx);
01402       //hCaloEmMEy    = _dbe->get(DirName+"/"+"METTask_CaloEmMEy");     if (hCaloEmMEy    && hCaloEmMEy->getRootObject())     hCaloEmMEy->Fill(_EmMEy);
01404       //hCaloEmMET    = _dbe->get(DirName+"/"+"METTask_CaloEmMET");     if (hCaloEmMET    && hCaloEmMET->getRootObject())     hCaloEmMET->Fill(_EmMET);
01405       //hCaloEmMETPhi = _dbe->get(DirName+"/"+"METTask_CaloEmMETPhi");  if (hCaloEmMETPhi && hCaloEmMETPhi->getRootObject())  hCaloEmMETPhi->Fill(_EmMetPhi);
01407       //
01408       //hCaloHaMEx    = _dbe->get(DirName+"/"+"METTask_CaloHaMEx");     if (hCaloHaMEx    && hCaloHaMEx->getRootObject())     hCaloHaMEx->Fill(_HaMEx);
01409       //hCaloHaMEy    = _dbe->get(DirName+"/"+"METTask_CaloHaMEy");     if (hCaloHaMEy    && hCaloHaMEy->getRootObject())     hCaloHaMEy->Fill(_HaMEy);
01411       //hCaloHaMET    = _dbe->get(DirName+"/"+"METTask_CaloHaMET");     if (hCaloHaMET    && hCaloHaMET->getRootObject())     hCaloHaMET->Fill(_HaMET);
01412       //hCaloHaMETPhi = _dbe->get(DirName+"/"+"METTask_CaloHaMETPhi");  if (hCaloHaMETPhi && hCaloHaMETPhi->getRootObject())  hCaloHaMETPhi->Fill(_HaMetPhi);
01414 
01415     } // _allhist
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   } // et threshold cut
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     W-electron event selection comes here
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     W-muon event selection comes here
01507    */
01508 
01509   return return_value;
01510 
01511 }
01512