00001 // -*- C++ -*- 00002 // MuIsoValidation.h 00003 // Package: Muon Isolation Validation 00004 // Class: MuIsoValidation 00005 // 00006 /* 00007 00008 Description: Muon Isolation Validation class 00009 00010 NOTE: The static member variable declerations *should* include the key word "static", but 00011 I haven't found an elegant way to initalize the vectors. Static primatives (e.g. int, 00012 float, ...) and simple static objects are easy to initialze. Outside of the class 00013 decleration, you would write 00014 00015 int MuIsoValidation::CONST_INT = 5; 00016 FooType MuIsoValidation::CONST_FOOT = Foo(constructor_argument); 00017 00018 but you can't do this if you want to, say, initalize a std::vector with a bunch of 00019 different values. So, you can't make them static and you have to initialize them using 00020 a member method. To keep it consistent, I've just initialized them all in the same 00021 method, even the simple types. 00022 00023 */ 00024 // 00025 // Original Author: "C. Jess Riedel", UC Santa Barbara 00026 // Created: Tue Jul 17 15:58:24 CDT 2007 00027 // 00028 00029 //Base class 00030 #include "FWCore/Framework/interface/EDAnalyzer.h" 00031 00032 //Member types 00033 #include "FWCore/Utilities/interface/InputTag.h" 00034 #include "DQMServices/Core/interface/DQMStore.h" 00035 #include "DQMServices/Core/interface/MonitorElement.h" 00036 #include "FWCore/ServiceRegistry/interface/Service.h" 00037 00038 //Other include files 00039 #include "DataFormats/MuonReco/interface/Muon.h" 00040 #include "DataFormats/MuonReco/interface/MuonFwd.h" 00041 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h" 00042 #include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h" 00043 00044 //---------------------------------------- 00045 00046 //Forward declarations 00047 class TH1; 00048 class TH1I; 00049 class TH1D; 00050 class TH2; 00051 class TProfile; 00052 00053 //------------------------------------------ 00054 // Class Declaration: MuIsoValidation 00055 //-------------------------------------- 00056 class MuIsoValidation : public edm::EDAnalyzer { 00057 //---------namespace and typedefs-------------- 00058 typedef edm::View<reco::Muon>::const_iterator MuonIterator; 00059 typedef edm::RefToBase<reco::Muon> MuonBaseRef; 00060 typedef edm::Handle<reco::IsoDepositMap> MuIsoDepHandle; 00061 typedef const reco::IsoDeposit MuIsoDepRef; 00062 00063 public: 00064 //---------methods---------------------------- 00065 explicit MuIsoValidation(const edm::ParameterSet&); 00066 ~MuIsoValidation(); 00067 00068 00069 private: 00070 //---------methods---------------------------- 00071 virtual void beginJob() ; 00072 virtual void analyze(const edm::Event&, const edm::EventSetup&); 00073 virtual void endJob() ; 00074 void InitStatics(); 00075 void RecordData(MuonIterator muon);//Fills Histograms with info from single muon 00076 void InitHistos();//adds title, bin information to member histograms 00077 void MakeLogBinsForProfile(Double_t* bin_edges, const double min, const double max); 00078 void FillHistos();//Fills histograms with data 00079 void NormalizeHistos(); //Normalize to number of muons 00080 TH1* GetTH1FromMonitorElement(MonitorElement* me); 00081 TH2* GetTH2FromMonitorElement(MonitorElement* me); 00082 TProfile* GetTProfileFromMonitorElement(MonitorElement* me); 00083 00084 00085 //----------Static Variables--------------- 00086 00087 //Collection labels 00088 edm::InputTag Muon_Tag; 00089 edm::InputTag tkIsoDeposit_Tag; 00090 edm::InputTag hcalIsoDeposit_Tag; 00091 edm::InputTag ecalIsoDeposit_Tag; 00092 edm::InputTag hoIsoDeposit_Tag; 00093 00094 //root file name 00095 std::string rootfilename; 00096 // Directories within the rootfile 00097 std::string dirName; 00098 std::string subDirName; 00099 00100 //Histogram parameters 00101 static const int NUM_VARS = 15; 00102 double L_BIN_WIDTH;//large bins 00103 double S_BIN_WIDTH;//small bins 00104 int LOG_BINNING_ENABLED;//pseudo log binning for profile plots 00105 int NUM_LOG_BINS; 00106 double LOG_BINNING_RATIO; 00107 bool requireCombinedMuon; 00108 00109 std::string title_sam; 00110 std::string title_cone; 00111 std::string title_cd; 00112 00113 std::vector<std::string> main_titles;//[NUM_VARS] 00114 std::vector<std::string> axis_titles;//[NUM_VARS] 00115 std::vector<std::string> names;//[NUM_VARS] 00116 std::vector< std::vector<double> > param;//[NUM_VARS][3] 00117 std::vector<int> isContinuous;//[NUM_VARs] 00118 00119 //---------------Dynamic Variables--------------------- 00120 00121 //MonitorElement 00122 DQMStore* dbe; 00123 00124 //The Data 00125 int theMuonData;//[number of muons] 00126 double theData[NUM_VARS]; 00127 00128 //Histograms 00129 MonitorElement* h_nMuons; 00130 std::vector<MonitorElement*> h_1D;//[NUM_VARS] 00131 std::vector<MonitorElement*> cd_plots;//[NUM_VARS] 00132 // std::vector< std::vector<MonitorElement*> > h_2D;//[NUM_VARS][NUM_VARS] 00133 std::vector< std::vector<MonitorElement*> > p_2D;//[NUM_VARS][NUM_VARS] 00134 00135 //Counters 00136 int nEvents; 00137 int nIncMuons; 00138 int nCombinedMuons; 00139 00140 //enums for monitorElement 00141 enum {NOAXIS,XAXIS,YAXIS,ZAXIS}; 00142 }; 00143