00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "DQMOffline/Muon/src/MuonRecoAnalyzer.h"
00012
00013 #include "DataFormats/Common/interface/Handle.h"
00014 #include "DataFormats/MuonReco/interface/Muon.h"
00015 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00016 #include "DataFormats/MuonReco/interface/MuonEnergy.h"
00017
00018 #include "DataFormats/TrackReco/interface/Track.h"
00019 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00020
00021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00022
00023 #include <string>
00024 #include "TMath.h"
00025 using namespace std;
00026 using namespace edm;
00027
00028
00029
00030 MuonRecoAnalyzer::MuonRecoAnalyzer(const edm::ParameterSet& pSet, MuonServiceProxy *theService):MuonAnalyzerBase(theService) {
00031 parameters = pSet;
00032 }
00033
00034
00035 MuonRecoAnalyzer::~MuonRecoAnalyzer() { }
00036
00037
00038 void MuonRecoAnalyzer::beginJob(DQMStore * dbe) {
00039
00040 metname = "muRecoAnalyzer";
00041
00042 LogTrace(metname)<<"[MuonRecoAnalyzer] Parameters initialization";
00043 dbe->setCurrentFolder("Muons/MuonRecoAnalyzer");
00044
00045 muReco = dbe->book1D("muReco", "muon reconstructed tracks", 6, 1, 7);
00046 muReco->setBinLabel(1,"glb+tk+sta");
00047 muReco->setBinLabel(2,"glb+sta");
00048 muReco->setBinLabel(3,"tk+sta");
00049 muReco->setBinLabel(4,"tk");
00050 muReco->setBinLabel(5,"sta");
00051 muReco->setBinLabel(6,"calo");
00052
00053 int binFactor = 4;
00054
00055
00056 etaBin = parameters.getParameter<int>("etaBin");
00057 etaMin = parameters.getParameter<double>("etaMin");
00058 etaMax = parameters.getParameter<double>("etaMax");
00059 std::string histname = "GlbMuon_";
00060 etaGlbTrack.push_back(dbe->book1D(histname+"Glb_eta", "#eta_{GLB}", etaBin, etaMin, etaMax));
00061 etaGlbTrack.push_back(dbe->book1D(histname+"Tk_eta", "#eta_{TKfromGLB}", etaBin, etaMin, etaMax));
00062 etaGlbTrack.push_back(dbe->book1D(histname+"Sta_eta", "#eta_{STAfromGLB}", etaBin, etaMin, etaMax));
00063 etaResolution.push_back(dbe->book1D("Res_TkGlb_eta", "#eta_{TKfromGLB} - #eta_{GLB}", etaBin*binFactor, etaMin/3000, etaMax/3000));
00064 etaResolution.push_back(dbe->book1D("Res_GlbSta_eta", "#eta_{GLB} - #eta_{STAfromGLB}", etaBin*binFactor, etaMin/100, etaMax/100));
00065 etaResolution.push_back(dbe->book1D("Res_TkSta_eta", "#eta_{TKfromGLB} - #eta_{STAfromGLB}", etaBin*binFactor, etaMin/100, etaMax/100));
00066 etaResolution.push_back(dbe->book2D("ResVsEta_TkGlb_eta", "(#eta_{TKfromGLB} - #eta_{GLB}) vs #eta_{GLB}", etaBin, etaMin, etaMax, etaBin*binFactor, etaMin/3000, etaMax/3000));
00067 etaResolution.push_back(dbe->book2D("ResVsEta_GlbSta_eta", "(#eta_{GLB} - #eta_{STAfromGLB}) vs #eta_{GLB}", etaBin, etaMin, etaMax, etaBin*binFactor, etaMin/100, etaMax/100));
00068 etaResolution.push_back(dbe->book2D("ResVsEta_TkSta_eta", "(#eta_{TKfromGLB} - #eta_{STAfromGLB}) vs #eta_{TKfromGLB}", etaBin, etaMin, etaMax, etaBin*binFactor, etaMin/100, etaMax/100));
00069 etaPull = dbe->book1D("Pull_TkSta_eta", "#eta_{TKfromGLB} - #eta_{GLB} / error", 100,-10,10);
00070 etaTrack = dbe->book1D("TkMuon_eta", "#eta_{TK}", etaBin, etaMin, etaMax);
00071 etaStaTrack = dbe->book1D("StaMuon_eta", "#eta_{STA}", etaBin, etaMin, etaMax);
00072 etaEfficiency.push_back(dbe->book1D("StaEta", "#eta_{STAfromGLB}", etaBin, etaMin, etaMax));
00073 etaEfficiency.push_back(dbe->book1D("StaEta_ifCombinedAlso", "#eta_{STAfromGLB} if isGlb=true", etaBin, etaMin, etaMax));
00074
00075
00076 thetaBin = parameters.getParameter<int>("thetaBin");
00077 thetaMin = parameters.getParameter<double>("thetaMin");
00078 thetaMax = parameters.getParameter<double>("thetaMax");
00079 thetaGlbTrack.push_back(dbe->book1D(histname+"Glb_theta", "#theta_{GLB}", thetaBin, thetaMin, thetaMax));
00080 thetaGlbTrack[0]->setAxisTitle("rad");
00081 thetaGlbTrack.push_back(dbe->book1D(histname+"Tk_theta", "#theta_{TKfromGLB}", thetaBin, thetaMin, thetaMax));
00082 thetaGlbTrack[1]->setAxisTitle("rad");
00083 thetaGlbTrack.push_back(dbe->book1D(histname+"Sta_theta", "#theta_{STAfromGLB}", thetaBin, thetaMin, thetaMax));
00084 thetaGlbTrack[2]->setAxisTitle("rad");
00085 thetaResolution.push_back(dbe->book1D("Res_TkGlb_theta", "#theta_{TKfromGLB} - #theta_{GLB}", thetaBin*binFactor, -(thetaMax/3000), thetaMax/3000));
00086 thetaResolution[0]->setAxisTitle("rad");
00087 thetaResolution.push_back(dbe->book1D("Res_GlbSta_theta", "#theta_{GLB} - #theta_{STAfromGLB}", thetaBin*binFactor,-(thetaMax/100), thetaMax/100));
00088 thetaResolution[1]->setAxisTitle("rad");
00089 thetaResolution.push_back(dbe->book1D("Res_TkSta_theta", "#theta_{TKfromGLB} - #theta_{STAfromGLB}", thetaBin*binFactor, -(thetaMax/100), thetaMax/100));
00090 thetaResolution[2]->setAxisTitle("rad");
00091 thetaResolution.push_back(dbe->book2D("ResVsTheta_TkGlb_theta", "(#theta_{TKfromGLB} - #theta_{GLB}) vs #theta_{GLB}", thetaBin, thetaMin, thetaMax, thetaBin*binFactor, -(thetaMax/3000), thetaMax/3000));
00092 thetaResolution[3]->setAxisTitle("rad",1);
00093 thetaResolution[3]->setAxisTitle("rad",2);
00094 thetaResolution.push_back(dbe->book2D("ResVsTheta_GlbSta_theta", "(#theta_{GLB} - #theta_{STAfromGLB}) vs #theta_{GLB}", thetaBin, thetaMin, thetaMax, thetaBin*binFactor, -(thetaMax/100), thetaMax/100));
00095 thetaResolution[4]->setAxisTitle("rad",1);
00096 thetaResolution[4]->setAxisTitle("rad",2);
00097 thetaResolution.push_back(dbe->book2D("ResVsTheta_TkSta_theta", "(#theta_{TKfromGLB} - #theta_{STAfromGLB}) vs #theta_{TKfromGLB}", thetaBin, thetaMin, thetaMax, thetaBin*binFactor, -(thetaMax/100), thetaMax/100));
00098 thetaResolution[5]->setAxisTitle("rad",1);
00099 thetaResolution[5]->setAxisTitle("rad",2);
00100 thetaPull = dbe->book1D("Pull_TkSta_theta", "#theta_{TKfromGLB} - #theta_{STAfromGLB} / error", 100,-10,10);
00101 thetaTrack = dbe->book1D("TkMuon_theta", "#theta_{TK}", thetaBin, thetaMin, thetaMax);
00102 thetaTrack->setAxisTitle("rad");
00103 thetaStaTrack = dbe->book1D("StaMuon_theta", "#theta_{STA}", thetaBin, thetaMin, thetaMax);
00104 thetaStaTrack->setAxisTitle("rad");
00105
00106
00107 phiBin = parameters.getParameter<int>("phiBin");
00108 phiMin = parameters.getParameter<double>("phiMin");
00109 phiMax = parameters.getParameter<double>("phiMax");
00110 phiGlbTrack.push_back(dbe->book1D(histname+"Glb_phi", "#phi_{GLB}", phiBin, phiMin, phiMax));
00111 phiGlbTrack[0]->setAxisTitle("rad");
00112 phiGlbTrack.push_back(dbe->book1D(histname+"Tk_phi", "#phi_{TKfromGLB}", phiBin, phiMin, phiMax));
00113 phiGlbTrack[1]->setAxisTitle("rad");
00114 phiGlbTrack.push_back(dbe->book1D(histname+"Sta_phi", "#phi_{STAfromGLB}", phiBin, phiMin, phiMax));
00115 phiGlbTrack[2]->setAxisTitle("rad");
00116 phiResolution.push_back(dbe->book1D("Res_TkGlb_phi", "#phi_{TKfromGLB} - #phi_{GLB}", phiBin*binFactor, phiMin/3000, phiMax/3000));
00117 phiResolution[0]->setAxisTitle("rad");
00118 phiResolution.push_back(dbe->book1D("Res_GlbSta_phi", "#phi_{GLB} - #phi_{STAfromGLB}", phiBin*binFactor, phiMin/100, phiMax/100));
00119 phiResolution[1]->setAxisTitle("rad");
00120 phiResolution.push_back(dbe->book1D("Res_TkSta_phi", "#phi_{TKfromGLB} - #phi_{STAfromGLB}", phiBin*binFactor, phiMin/100, phiMax/100));
00121 phiResolution[2]->setAxisTitle("rad");
00122 phiResolution.push_back(dbe->book2D("ResVsPhi_TkGlb_phi", "(#phi_{TKfromGLB} - #phi_{GLB}) vs #phi_GLB", phiBin, phiMin, phiMax, phiBin*binFactor, phiMin/3000, phiMax/3000));
00123 phiResolution[3]->setAxisTitle("rad",1);
00124 phiResolution[3]->setAxisTitle("rad",2);
00125 phiResolution.push_back(dbe->book2D("ResVsPhi_GlbSta_phi", "(#phi_{GLB} - #phi_{STAfromGLB}) vs #phi_{GLB}", phiBin, phiMin, phiMax, phiBin*binFactor, phiMin/100, phiMax/100));
00126 phiResolution[4]->setAxisTitle("rad",1);
00127 phiResolution[4]->setAxisTitle("rad",2);
00128 phiResolution.push_back(dbe->book2D("ResVsPhi_TkSta_phi", "(#phi_{TKfromGLB} - #phi_{STAfromGLB}) vs #phi_{TKfromGLB}", phiBin, phiMin, phiMax, phiBin*binFactor, phiMin/100, phiMax/100));
00129 phiResolution[5]->setAxisTitle("rad",1);
00130 phiResolution[5]->setAxisTitle("rad",2);
00131 phiPull = dbe->book1D("Pull_TkSta_phi", "#phi_{TKfromGLB} - #phi_{STAfromGLB} / error", 100,-10,10);
00132 phiTrack = dbe->book1D("TkMuon_phi", "#phi_{TK}", phiBin, phiMin, phiMax);
00133 phiTrack->setAxisTitle("rad");
00134 phiStaTrack = dbe->book1D("StaMuon_phi", "#phi_{STA}", phiBin, phiMin, phiMax);
00135 phiStaTrack->setAxisTitle("rad");
00136 phiEfficiency.push_back(dbe->book1D("StaPhi", "#phi_{STAfromGLB}", phiBin, phiMin, phiMax));
00137 phiEfficiency[0]->setAxisTitle("rad");
00138 phiEfficiency.push_back(dbe->book1D("StaPhi_ifCombinedAlso", "#phi_{STAfromGLB} if the isGlb=true", phiBin, phiMin, phiMax));
00139 phiEfficiency[1]->setAxisTitle("rad");
00140
00141
00142 chi2Bin = parameters.getParameter<int>("chi2Bin");
00143 chi2Min = parameters.getParameter<double>("chi2Min");
00144 chi2Max = parameters.getParameter<double>("chi2Max");
00145 chi2OvDFGlbTrack.push_back(dbe->book1D(histname+"Glb_chi2OverDf", "#chi_{2}OverDF_{GLB}", chi2Bin, chi2Min, chi2Max));
00146 chi2OvDFGlbTrack.push_back(dbe->book1D(histname+"Tk_chi2OverDf", "#chi_{2}OverDF_{TKfromGLB}", phiBin, chi2Min, chi2Max));
00147 chi2OvDFGlbTrack.push_back(dbe->book1D(histname+"Sta_chi2OverDf", "#chi_{2}OverDF_{STAfromGLB}", chi2Bin, chi2Min, chi2Max));
00148 chi2OvDFTrack = dbe->book1D("TkMuon_chi2OverDf", "#chi_{2}OverDF_{TK}", chi2Bin, chi2Min, chi2Max);
00149 chi2OvDFStaTrack = dbe->book1D("StaMuon_chi2OverDf", "#chi_{2}OverDF_{STA}", chi2Bin, chi2Min, chi2Max);
00150
00151 probchi2GlbTrack.push_back(dbe->book1D(histname+"Glb_probchi", "Prob #chi_{GLB}", 120, chi2Min, 1.20));
00152 probchi2GlbTrack.push_back(dbe->book1D(histname+"Tk_probchi", "Prob #chi_{TKfromGLB}", 120, chi2Min, 1.20));
00153 probchi2GlbTrack.push_back(dbe->book1D(histname+"Sta_probchi", "Prob #chi_{STAfromGLB}", 120, chi2Min, 1.20));
00154 probchi2Track=dbe->book1D("TkMuon_probchi", "Prob #chi_{TK}", 120, chi2Min, 1.20);
00155 probchi2StaTrack=dbe->book1D("StaMuon_probchi", "Prob #chi_{STA}", 120, chi2Min, 1.20);
00156
00157
00158 pBin = parameters.getParameter<int>("pBin");
00159 pMin = parameters.getParameter<double>("pMin");
00160 pMax = parameters.getParameter<double>("pMax");
00161 pGlbTrack.push_back(dbe->book1D(histname+"Glb_p", "p_{GLB}", pBin, pMin, pMax));
00162 pGlbTrack[0]->setAxisTitle("GeV");
00163 pGlbTrack.push_back(dbe->book1D(histname+"Tk_p", "p_{TKfromGLB}", pBin, pMin, pMax));
00164 pGlbTrack[1]->setAxisTitle("GeV");
00165 pGlbTrack.push_back(dbe->book1D(histname+"Sta_p", "p_{STAfromGLB}", pBin, pMin, pMax));
00166 pGlbTrack[2]->setAxisTitle("GeV");
00167 pTrack = dbe->book1D("TkMuon_p", "p_{TK}", pBin, pMin, pMax);
00168 pTrack->setAxisTitle("GeV");
00169 pStaTrack = dbe->book1D("StaMuon_p", "p_{STA}", pBin, pMin, pMax);
00170 pStaTrack->setAxisTitle("GeV");
00171
00172
00173 ptBin = parameters.getParameter<int>("ptBin");
00174 ptMin = parameters.getParameter<double>("ptMin");
00175 ptMax = parameters.getParameter<double>("ptMax");
00176 ptGlbTrack.push_back(dbe->book1D(histname+"Glb_pt", "pt_{GLB}", ptBin, ptMin, ptMax));
00177 ptGlbTrack[0]->setAxisTitle("GeV");
00178 ptGlbTrack.push_back(dbe->book1D(histname+"Tk_pt", "pt_{TKfromGLB}", ptBin, ptMin, ptMax));
00179 ptGlbTrack[1]->setAxisTitle("GeV");
00180 ptGlbTrack.push_back(dbe->book1D(histname+"Sta_pt", "pt_{STAfromGLB}", ptBin, ptMin, ptMax));
00181 ptGlbTrack[2]->setAxisTitle("GeV");
00182 ptTrack = dbe->book1D("TkMuon_pt", "pt_{TK}", ptBin, ptMin, ptMax);
00183 ptTrack->setAxisTitle("GeV");
00184 ptStaTrack = dbe->book1D("StaMuon_pt", "pt_{STA}", ptBin, ptMin, pMax);
00185 ptStaTrack->setAxisTitle("GeV");
00186
00187
00188 qGlbTrack.push_back(dbe->book1D(histname+"Glb_q", "q_{GLB}", 5, -2.5, 2.5));
00189 qGlbTrack.push_back(dbe->book1D(histname+"Tk_q", "q_{TKfromGLB}", 5, -2.5, 2.5));
00190 qGlbTrack.push_back(dbe->book1D(histname+"Sta_q", "q_{STAformGLB}", 5, -2.5, 2.5));
00191 qGlbTrack.push_back(dbe->book1D(histname+"qComparison", "comparison between q_{GLB} and q_{TKfromGLB}, q_{STAfromGLB}", 8, 0.5, 8.5));
00192 qGlbTrack[3]->setBinLabel(1,"qGlb=qSta");
00193 qGlbTrack[3]->setBinLabel(2,"qGlb!=qSta");
00194 qGlbTrack[3]->setBinLabel(3,"qGlb=qTk");
00195 qGlbTrack[3]->setBinLabel(4,"qGlb!=qTk");
00196 qGlbTrack[3]->setBinLabel(5,"qSta=qTk");
00197 qGlbTrack[3]->setBinLabel(6,"qSta!=qTk");
00198 qGlbTrack[3]->setBinLabel(7,"qGlb!=qSta,qGlb!=Tk");
00199 qGlbTrack[3]->setBinLabel(8,"qGlb=qSta,qGlb=Tk");
00200 qTrack = dbe->book1D("TkMuon_q", "q_{TK}", 5, -2.5, 2.5);
00201 qStaTrack = dbe->book1D("StaMuon_q", "q_{STA}", 5, -2.5, 2.5);
00202
00203
00204 pResBin = parameters.getParameter<int>("pResBin");
00205 pResMin = parameters.getParameter<double>("pResMin");
00206 pResMax = parameters.getParameter<double>("pResMax");
00207 qOverpResolution.push_back(dbe->book1D("Res_TkGlb_qOverp", "(q/p)_{TKfromGLB} - (q/p)_{GLB}", pResBin*binFactor*2, pResMin/10, pResMax/10));
00208 qOverpResolution[0]->setAxisTitle("GeV^{-1}");
00209 qOverpResolution.push_back(dbe->book1D("Res_GlbSta_qOverp", "(q/p)_{GLB} - (q/p)_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00210 qOverpResolution[1]->setAxisTitle("GeV^{-1}");
00211 qOverpResolution.push_back(dbe->book1D("Res_TkSta_qOverp", "(q/p)_{TKfromGLB} - (q/p)_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00212 qOverpResolution[2]->setAxisTitle("GeV^{-1}");
00213 qOverpPull = dbe->book1D("Pull_TkSta_qOverp", "(q/p)_{TKfromGLB} - (q/p)_{STAfromGLB} / error", 100,-10,10);
00214
00215 oneOverpResolution.push_back(dbe->book1D("Res_TkGlb_oneOverp", "(1/p)_{TKfromGLB} - (1/p)_{GLB}", pResBin*binFactor*2, pResMin/10, pResMax/10));
00216 oneOverpResolution[0]->setAxisTitle("GeV^{-1}");
00217 oneOverpResolution.push_back(dbe->book1D("Res_GlbSta_oneOverp", "(1/p)_{GLB} - (1/p)_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00218 oneOverpResolution[1]->setAxisTitle("GeV^{-1}");
00219 oneOverpResolution.push_back(dbe->book1D("Res_TkSta_oneOverp", "(q/p)_{TKfromGLB} - (q/p)_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00220 oneOverpResolution[2]->setAxisTitle("GeV^{-1}");
00221 oneOverpPull = dbe->book1D("Pull_TkSta_oneOverp", "(1/p)_{TKfromGLB} - (1/p)_{STAfromGLB} / error", 100,-10,10);
00222
00223
00224 qOverptResolution.push_back(dbe->book1D("Res_TkGlb_qOverpt", "(q/p_{t})_{TKfromGLB} - (q/p_{t})_{GLB}", pResBin*binFactor*2, pResMin/10, pResMax/10));
00225 qOverptResolution[0]->setAxisTitle("GeV^{-1}");
00226 qOverptResolution.push_back(dbe->book1D("Res_GlbSta_qOverpt", "(q/p_{t})_{GLB} - (q/p_{t})_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00227 qOverptResolution[1]->setAxisTitle("GeV^{-1}");
00228 qOverptResolution.push_back(dbe->book1D("Res_TkSta_qOverpt", "(q/p_{t})_{TKfromGLB} - (q/p_{t})_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00229 qOverptResolution[2]->setAxisTitle("GeV^{-1}");
00230 qOverptPull = dbe->book1D("Pull_TkSta_qOverpt", "(q/pt)_{TKfromGLB} - (q/pt)_{STAfromGLB} / error", 100,-10,10);
00231
00232 oneOverptResolution.push_back(dbe->book1D("Res_TkGlb_oneOverpt", "(1/p_{t})_{TKfromGLB} - (1/p_{t})_{GLB}", pResBin*binFactor*2, pResMin/10, pResMax/10));
00233 oneOverptResolution[0]->setAxisTitle("GeV^{-1}");
00234 oneOverptResolution.push_back(dbe->book1D("Res_GlbSta_oneOverpt", "(1/p_{t})_{GLB} - (1/p_{t})_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00235 oneOverptResolution[1]->setAxisTitle("GeV^{-1}");
00236 oneOverptResolution.push_back(dbe->book1D("Res_TkSta_oneOverpt", "(1/p_{t})_{TKfromGLB} - (1/p_{t})_{STAfromGLB}", pResBin*binFactor, pResMin, pResMax));
00237 oneOverptResolution[2]->setAxisTitle("GeV^{-1}");
00238 oneOverptResolution.push_back(dbe->book2D("ResVsEta_TkGlb_oneOverpt", "(#eta_{TKfromGLB} - #eta_{GLB}) vs (1/p_{t})_{GLB}", etaBin, etaMin, etaMax, pResBin*binFactor*2, pResMin/10, pResMax/10));
00239 oneOverptResolution[3]->setAxisTitle("GeV^{-1}",2);
00240 oneOverptResolution.push_back(dbe->book2D("ResVsEta_GlbSta_oneOverpt", "(#eta_{GLB} - #eta_{STAfromGLB} vs (1/p_{t})_{GLB}", etaBin, etaMin, etaMax, pResBin*binFactor, pResMin, pResMax));
00241 oneOverptResolution[4]->setAxisTitle("GeV^{-1}",2);
00242 oneOverptResolution.push_back(dbe->book2D("ResVsEta_TkSta_oneOverpt", "(#eta_{TKfromGLB} - #eta_{STAfromGLB}) vs (1/p_{t})_{TKfromGLB}", etaBin, etaMin, etaMax, pResBin*binFactor, pResMin, pResMax));
00243 oneOverptResolution[5]->setAxisTitle("GeV^{-1}",2);
00244 oneOverptResolution.push_back(dbe->book2D("ResVsPhi_TkGlb_oneOverpt", "(#phi_{TKfromGLB} - #phi_{GLB}) vs (1/p_{t})_{GLB}", phiBin, phiMin, phiMax, pResBin*binFactor*2, pResMin/10, pResMax/10));
00245 oneOverptResolution[6]->setAxisTitle("rad",1);
00246 oneOverptResolution[6]->setAxisTitle("GeV^{-1}",2);
00247 oneOverptResolution.push_back(dbe->book2D("ResVsPhi_GlbSta_oneOverpt", "(#phi_{GLB} - #phi_{STAfromGLB} vs (1/p_{t})_{GLB}", phiBin, phiMin, phiMax, pResBin*binFactor, pResMin, pResMax));
00248 oneOverptResolution[7]->setAxisTitle("rad",1);
00249 oneOverptResolution[7]->setAxisTitle("GeV^{-1}",2);
00250 oneOverptResolution.push_back(dbe->book2D("ResVsPhi_TkSta_oneOverpt", "(#phi_{TKfromGLB} - #phi_{STAfromGLB}) vs (1/p_{t})_{TKfromGLB}", phiBin, phiMin, phiMax, pResBin*binFactor, pResMin, pResMax));
00251 oneOverptResolution[8]->setAxisTitle("rad",1);
00252 oneOverptResolution[8]->setAxisTitle("GeV^{-1}",2);
00253 oneOverptResolution.push_back(dbe->book2D("ResVsPt_TkGlb_oneOverpt", "((1/p_{t})_{TKfromGLB} - (1/p_{t})_{GLB}) vs (1/p_{t})_{GLB}", ptBin/5, ptMin, ptMax/100, pResBin*binFactor*2, pResMin/10, pResMax/10));
00254 oneOverptResolution[9]->setAxisTitle("GeV^{-1}",1);
00255 oneOverptResolution[9]->setAxisTitle("GeV^{-1}",2);
00256 oneOverptResolution.push_back(dbe->book2D("ResVsPt_GlbSta_oneOverpt", "((1/p_{t})_{GLB} - (1/p_{t})_{STAfromGLB} vs (1/p_{t})_{GLB}", ptBin/5, ptMin, ptMax/100, pResBin*binFactor, pResMin, pResMax));
00257 oneOverptResolution[10]->setAxisTitle("GeV^{-1}",1);
00258 oneOverptResolution[10]->setAxisTitle("GeV^{-1}",2);
00259 oneOverptResolution.push_back(dbe->book2D("ResVsPt_TkSta_oneOverpt", "((1/p_{t})_{TKfromGLB} - (1/p_{t})_{STAfromGLB}) vs (1/p_{t})_{TKfromGLB}", ptBin/5, ptMin, ptMax/100, pResBin*binFactor, pResMin, pResMax));
00260 oneOverptResolution[11]->setAxisTitle("GeV^{-1}",1);
00261 oneOverptResolution[11]->setAxisTitle("GeV^{-1}",2);
00262 oneOverptPull = dbe->book1D("Pull_TkSta_oneOverpt", "(1/pt)_{TKfromGLB} - (1/pt)_{STAfromGLB} / error", 100,-10,10);
00263
00264
00265
00266 rhBin=parameters.getParameter<int>("rhBin");
00267 rhMin=parameters.getParameter<double>("rhMin");
00268 rhMax=parameters.getParameter<double>("rhMax");
00269 rhAnalysis.push_back(dbe->book1D("StaRh_Frac_inGlb", "recHits_{STAinGLB} / recHits_{GLB}", rhBin, rhMin, rhMax));
00270 rhAnalysis.push_back(dbe->book1D("TkRh_Frac_inGlb", "recHits_{TKinGLB} / recHits_{GLB}", rhBin, rhMin, rhMax));
00271 rhAnalysis.push_back(dbe->book1D("StaRh_inGlb_Div_RhAssoSta", "recHits_{STAinGLB} / recHits_{STAfromGLB}", rhBin, rhMin, rhMax));
00272 rhAnalysis.push_back(dbe->book1D("TkRh_inGlb_Div_RhAssoTk", "recHits_{TKinGLB} / recHits_{TKfromGLB}", rhBin, rhMin, rhMax));
00273 rhAnalysis.push_back(dbe->book1D("GlbRh_Div_RhAssoStaTk", "recHits_{GLB} / (recHits_{TKfromGLB}+recHits_{STAfromGLB})", rhBin, rhMin, rhMax));
00274 rhAnalysis.push_back(dbe->book1D("invalidRh_Frac_inTk", "Invalid recHits / rechits_{GLB}", rhBin, rhMin, rhMax));
00275
00276
00277 muVStkSytemRotation.push_back(dbe->book2D("muVStkSytemRotation_posMu", "pT_{TK} / pT_{GLB} vs pT_{GLB} for #mu^{+}", 50,0,200,100,0.8,1.2));
00278 muVStkSytemRotation.push_back(dbe->book2D("muVStkSytemRotation_negMu", "pT_{TK} / pT_{GLB} vs pT_{GLB} for #mu^{-}", 50,0,200,100,0.8,1.2));
00279
00280 }
00281
00282
00283 void MuonRecoAnalyzer::GetRes( reco::TrackRef t1, reco::TrackRef t2, string par, float &res, float &pull){
00284
00285 float p1=0, p2=0, p1e=1, p2e=1;
00286
00287 if(par == "eta") {
00288 p1 = t1->eta(); p1e = t1->etaError();
00289 p2 = t2->eta(); p2e = t2->etaError();
00290 }
00291 else if(par == "theta") {
00292 p1 = t1->theta(); p1e = t1->thetaError();
00293 p2 = t2->theta(); p2e = t2->thetaError();
00294 }
00295 else if(par == "phi") {
00296 p1 = t1->phi(); p1e = t1->phiError();
00297 p2 = t2->phi(); p2e = t2->phiError();
00298 }
00299 else if(par == "qOverp") {
00300 p1 = t1->charge()/t1->p(); p1e = t1->qoverpError();
00301 p2 = t2->charge()/t2->p(); p2e = t2->qoverpError();
00302 }
00303 else if(par == "oneOverp") {
00304 p1 = 1./t1->p(); p1e = t1->qoverpError();
00305 p2 = 1./t2->p(); p2e = t2->qoverpError();
00306 }
00307 else if(par == "qOverpt") {
00308 p1 = t1->charge()/t1->pt(); p1e = t1->ptError()*p1*p1;
00309 p2 = t2->charge()/t2->pt(); p2e = t2->ptError()*p2*p2;
00310 }
00311 else if(par == "oneOverpt") {
00312 p1 = 1./t1->pt(); p1e = t1->ptError()*p1*p1;
00313 p2 = 1./t2->pt(); p2e = t2->ptError()*p2*p2;
00314 }
00315
00316 res = p1 - p2;
00317 if(p1e!=0 || p2e!=0) pull = res / sqrt(p1e*p1e + p2e*p2e);
00318 else pull = -99;
00319 return;
00320 }
00321
00322
00323
00324
00325
00326 void MuonRecoAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Muon& recoMu) {
00327
00328 LogTrace(metname)<<"[MuonRecoAnalyzer] Analyze the mu";
00329
00330 float res=0, pull=0;
00331
00332 if(recoMu.isGlobalMuon()) {
00333
00334 LogTrace(metname)<<"[MuonRecoAnalyzer] The mu is global - filling the histos";
00335 if(recoMu.isTrackerMuon() && recoMu.isStandAloneMuon())
00336 muReco->Fill(1);
00337 if(!(recoMu.isTrackerMuon()) && recoMu.isStandAloneMuon())
00338 muReco->Fill(2);
00339 if(!recoMu.isStandAloneMuon())
00340 LogTrace(metname)<<"[MuonRecoAnalyzer] ERROR: the mu is global but not standalone!";
00341
00342
00343 reco::TrackRef recoCombinedGlbTrack = recoMu.combinedMuon();
00344
00345 reco::TrackRef recoTkGlbTrack = recoMu.track();
00346
00347 reco::TrackRef recoStaGlbTrack = recoMu.standAloneMuon();
00348
00349
00350 etaGlbTrack[0]->Fill(recoCombinedGlbTrack->eta());
00351 etaGlbTrack[1]->Fill(recoTkGlbTrack->eta());
00352 etaGlbTrack[2]->Fill(recoStaGlbTrack->eta());
00353
00354 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "eta", res, pull);
00355 etaResolution[0]->Fill(res);
00356 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "eta", res, pull);
00357 etaResolution[1]->Fill(res);
00358 GetRes(recoTkGlbTrack, recoStaGlbTrack, "eta", res, pull);
00359 etaResolution[2]->Fill(res);
00360 etaPull->Fill(pull);
00361
00362 etaResolution[3]->Fill(recoCombinedGlbTrack->eta(), recoTkGlbTrack->eta()-recoCombinedGlbTrack->eta());
00363 etaResolution[4]->Fill(recoCombinedGlbTrack->eta(), -recoStaGlbTrack->eta()+recoCombinedGlbTrack->eta());
00364 etaResolution[5]->Fill(recoCombinedGlbTrack->eta(), recoTkGlbTrack->eta()-recoStaGlbTrack->eta());
00365
00366
00367
00368 thetaGlbTrack[0]->Fill(recoCombinedGlbTrack->theta());
00369 thetaGlbTrack[1]->Fill(recoTkGlbTrack->theta());
00370 thetaGlbTrack[2]->Fill(recoStaGlbTrack->theta());
00371 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "theta", res, pull);
00372 thetaResolution[0]->Fill(res);
00373
00374 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "theta", res, pull);
00375 thetaResolution[1]->Fill(res);
00376
00377 GetRes(recoTkGlbTrack, recoStaGlbTrack, "theta", res, pull);
00378 thetaResolution[2]->Fill(res);
00379 thetaPull->Fill(pull);
00380
00381 thetaResolution[3]->Fill(recoCombinedGlbTrack->theta(), recoTkGlbTrack->theta()-recoCombinedGlbTrack->theta());
00382 thetaResolution[4]->Fill(recoCombinedGlbTrack->theta(), -recoStaGlbTrack->theta()+recoCombinedGlbTrack->theta());
00383 thetaResolution[5]->Fill(recoCombinedGlbTrack->theta(), recoTkGlbTrack->theta()-recoStaGlbTrack->theta());
00384
00385
00386
00387 phiGlbTrack[0]->Fill(recoCombinedGlbTrack->phi());
00388 phiGlbTrack[1]->Fill(recoTkGlbTrack->phi());
00389 phiGlbTrack[2]->Fill(recoStaGlbTrack->phi());
00390 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "phi", res, pull);
00391 phiResolution[0]->Fill(res);
00392 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "phi", res, pull);
00393 phiResolution[1]->Fill(res);
00394 GetRes(recoTkGlbTrack, recoStaGlbTrack, "phi", res, pull);
00395 phiResolution[2]->Fill(res);
00396 phiPull->Fill(pull);
00397 phiResolution[3]->Fill(recoCombinedGlbTrack->phi(), recoTkGlbTrack->phi()-recoCombinedGlbTrack->phi());
00398 phiResolution[4]->Fill(recoCombinedGlbTrack->phi(), -recoStaGlbTrack->phi()+recoCombinedGlbTrack->phi());
00399 phiResolution[5]->Fill(recoCombinedGlbTrack->phi(), recoTkGlbTrack->phi()-recoStaGlbTrack->phi());
00400
00401 chi2OvDFGlbTrack[0]->Fill(recoCombinedGlbTrack->normalizedChi2());
00402 chi2OvDFGlbTrack[1]->Fill(recoTkGlbTrack->normalizedChi2());
00403 chi2OvDFGlbTrack[2]->Fill(recoStaGlbTrack->normalizedChi2());
00404
00405
00406
00407 probchi2GlbTrack[0]->Fill(TMath::Prob(recoCombinedGlbTrack->chi2(),recoCombinedGlbTrack->ndof()));
00408 probchi2GlbTrack[1]->Fill(TMath::Prob(recoTkGlbTrack->chi2(),recoTkGlbTrack->ndof()));
00409 probchi2GlbTrack[2]->Fill(TMath::Prob(recoStaGlbTrack->chi2(),recoStaGlbTrack->ndof()));
00410
00411
00412
00413 pGlbTrack[0]->Fill(recoCombinedGlbTrack->p());
00414 pGlbTrack[1]->Fill(recoTkGlbTrack->p());
00415 pGlbTrack[2]->Fill(recoStaGlbTrack->p());
00416
00417 ptGlbTrack[0]->Fill(recoCombinedGlbTrack->pt());
00418 ptGlbTrack[1]->Fill(recoTkGlbTrack->pt());
00419 ptGlbTrack[2]->Fill(recoStaGlbTrack->pt());
00420
00421 qGlbTrack[0]->Fill(recoCombinedGlbTrack->charge());
00422 qGlbTrack[1]->Fill(recoTkGlbTrack->charge());
00423 qGlbTrack[2]->Fill(recoStaGlbTrack->charge());
00424 if(recoCombinedGlbTrack->charge()==recoStaGlbTrack->charge()) qGlbTrack[3]->Fill(1);
00425 else qGlbTrack[3]->Fill(2);
00426 if(recoCombinedGlbTrack->charge()==recoTkGlbTrack->charge()) qGlbTrack[3]->Fill(3);
00427 else qGlbTrack[3]->Fill(4);
00428 if(recoStaGlbTrack->charge()==recoTkGlbTrack->charge()) qGlbTrack[3]->Fill(5);
00429 else qGlbTrack[3]->Fill(6);
00430 if(recoCombinedGlbTrack->charge()!=recoStaGlbTrack->charge() && recoCombinedGlbTrack->charge()!=recoTkGlbTrack->charge()) qGlbTrack[3]->Fill(7);
00431 if(recoCombinedGlbTrack->charge()==recoStaGlbTrack->charge() && recoCombinedGlbTrack->charge()==recoTkGlbTrack->charge()) qGlbTrack[3]->Fill(8);
00432
00433 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "qOverp", res, pull);
00434 qOverpResolution[0]->Fill(res);
00435 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "qOverp", res, pull);
00436 qOverpResolution[1]->Fill(res);
00437 GetRes(recoTkGlbTrack, recoStaGlbTrack, "qOverp", res, pull);
00438 qOverpResolution[2]->Fill(res);
00439 qOverpPull->Fill(pull);
00440
00441
00442 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "oneOverp", res, pull);
00443 oneOverpResolution[0]->Fill(res);
00444 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "oneOverp", res, pull);
00445 oneOverpResolution[1]->Fill(res);
00446 GetRes(recoTkGlbTrack, recoStaGlbTrack, "oneOverp", res, pull);
00447 oneOverpResolution[2]->Fill(res);
00448 oneOverpPull->Fill(pull);
00449
00450
00451 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "qOverpt", res, pull);
00452 qOverptResolution[0]->Fill(res);
00453 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "qOverpt", res, pull);
00454 qOverptResolution[1]->Fill(res);
00455 GetRes(recoTkGlbTrack, recoStaGlbTrack, "qOverpt", res, pull);
00456 qOverptResolution[2]->Fill(res);
00457 qOverptPull->Fill(pull);
00458
00459 GetRes(recoTkGlbTrack, recoCombinedGlbTrack, "oneOverpt", res, pull);
00460 oneOverptResolution[0]->Fill(res);
00461 GetRes(recoCombinedGlbTrack, recoStaGlbTrack, "oneOverpt", res, pull);
00462 oneOverptResolution[1]->Fill(res);
00463 GetRes(recoTkGlbTrack, recoStaGlbTrack, "oneOverpt", res, pull);
00464 oneOverptResolution[2]->Fill(res);
00465 oneOverptPull->Fill(pull);
00466
00467 oneOverptResolution[3]->Fill(recoCombinedGlbTrack->eta(),(1/recoTkGlbTrack->pt())-(1/recoCombinedGlbTrack->pt()));
00468 oneOverptResolution[4]->Fill(recoCombinedGlbTrack->eta(),-(1/recoStaGlbTrack->pt())+(1/recoCombinedGlbTrack->pt()));
00469 oneOverptResolution[5]->Fill(recoCombinedGlbTrack->eta(),(1/recoTkGlbTrack->pt())-(1/recoStaGlbTrack->pt()));
00470 oneOverptResolution[6]->Fill(recoCombinedGlbTrack->phi(),(1/recoTkGlbTrack->pt())-(1/recoCombinedGlbTrack->pt()));
00471 oneOverptResolution[7]->Fill(recoCombinedGlbTrack->phi(),-(1/recoStaGlbTrack->pt())+(1/recoCombinedGlbTrack->pt()));
00472 oneOverptResolution[8]->Fill(recoCombinedGlbTrack->phi(),(1/recoTkGlbTrack->pt())-(1/recoStaGlbTrack->pt()));
00473 oneOverptResolution[9]->Fill(recoCombinedGlbTrack->pt(),(1/recoTkGlbTrack->pt())-(1/recoCombinedGlbTrack->pt()));
00474 oneOverptResolution[10]->Fill(recoCombinedGlbTrack->pt(),-(1/recoStaGlbTrack->pt())+(1/recoCombinedGlbTrack->pt()));
00475 oneOverptResolution[11]->Fill(recoCombinedGlbTrack->pt(),(1/recoTkGlbTrack->pt())-(1/recoStaGlbTrack->pt()));
00476
00477
00478 double rhGlb = recoCombinedGlbTrack->found();
00479
00480 double rhGlb_StaProvenance=0;
00481
00482 double rhGlb_TkProvenance=0;
00483 for (trackingRecHit_iterator recHit = recoCombinedGlbTrack->recHitsBegin();
00484 recHit!=recoCombinedGlbTrack->recHitsEnd(); ++recHit){
00485 if((*recHit)->isValid()){
00486 DetId id = (*recHit)->geographicalId();
00487 if (id.det() == DetId::Muon)
00488 rhGlb_StaProvenance++;
00489 if (id.det() == DetId::Tracker)
00490 rhGlb_TkProvenance++;
00491 }
00492 }
00493
00494 double rhStaGlb = recoStaGlbTrack->recHitsSize();
00495
00496 double rhTkGlb = recoTkGlbTrack->found();
00497
00498 double rhTkGlb_notValid = recoTkGlbTrack->lost();
00499
00500
00501 rhAnalysis[0]->Fill(rhGlb_StaProvenance/rhGlb);
00502 rhAnalysis[1]->Fill(rhGlb_TkProvenance/rhGlb);
00503 rhAnalysis[2]->Fill(rhGlb_StaProvenance/rhStaGlb);
00504 rhAnalysis[3]->Fill(rhGlb_TkProvenance/rhTkGlb);
00505 rhAnalysis[4]->Fill(rhGlb/(rhStaGlb+rhTkGlb));
00506 rhAnalysis[5]->Fill(rhTkGlb_notValid/rhGlb);
00507
00508
00509 if(recoCombinedGlbTrack->charge()>0)
00510 muVStkSytemRotation[0]->Fill(recoCombinedGlbTrack->pt(),recoTkGlbTrack->pt()/recoCombinedGlbTrack->pt());
00511 else
00512 muVStkSytemRotation[1]->Fill(recoCombinedGlbTrack->pt(),recoTkGlbTrack->pt()/recoCombinedGlbTrack->pt());
00513
00514 }
00515
00516
00517 if(recoMu.isTrackerMuon() && !(recoMu.isGlobalMuon())) {
00518 LogTrace(metname)<<"[MuonRecoAnalyzer] The mu is tracker only - filling the histos";
00519 if(recoMu.isStandAloneMuon())
00520 muReco->Fill(3);
00521 if(!(recoMu.isStandAloneMuon()))
00522 muReco->Fill(4);
00523
00524
00525 reco::TrackRef recoTrack = recoMu.track();
00526
00527 etaTrack->Fill(recoTrack->eta());
00528 thetaTrack->Fill(recoTrack->theta());
00529 phiTrack->Fill(recoTrack->phi());
00530 chi2OvDFTrack->Fill(recoTrack->normalizedChi2());
00531 probchi2Track->Fill(TMath::Prob(recoTrack->chi2(),recoTrack->ndof()));
00532 pTrack->Fill(recoTrack->p());
00533 ptTrack->Fill(recoTrack->pt());
00534 qTrack->Fill(recoTrack->charge());
00535
00536 }
00537
00538 if(recoMu.isStandAloneMuon() && !(recoMu.isGlobalMuon())) {
00539 LogTrace(metname)<<"[MuonRecoAnalyzer] The mu is STA only - filling the histos";
00540 if(!(recoMu.isTrackerMuon()))
00541 muReco->Fill(5);
00542
00543
00544 reco::TrackRef recoStaTrack = recoMu.standAloneMuon();
00545
00546 etaStaTrack->Fill(recoStaTrack->eta());
00547 thetaStaTrack->Fill(recoStaTrack->theta());
00548 phiStaTrack->Fill(recoStaTrack->phi());
00549 chi2OvDFStaTrack->Fill(recoStaTrack->normalizedChi2());
00550 probchi2StaTrack->Fill(TMath::Prob(recoStaTrack->chi2(),recoStaTrack->ndof()));
00551 pStaTrack->Fill(recoStaTrack->p());
00552 ptStaTrack->Fill(recoStaTrack->pt());
00553 qStaTrack->Fill(recoStaTrack->charge());
00554
00555 }
00556
00557 if(recoMu.isCaloMuon() && !(recoMu.isGlobalMuon()) && !(recoMu.isTrackerMuon()) && !(recoMu.isStandAloneMuon()))
00558 muReco->Fill(6);
00559
00560
00561
00562
00563 reco::TrackRef recoStaGlbTrack = recoMu.standAloneMuon();
00564
00565 if(recoMu.isStandAloneMuon()){
00566 etaEfficiency[0]->Fill(recoStaGlbTrack->eta());
00567 phiEfficiency[0]->Fill(recoStaGlbTrack->phi());
00568 }
00569 if(recoMu.isStandAloneMuon() && recoMu.isGlobalMuon()){
00570 etaEfficiency[1]->Fill(recoStaGlbTrack->eta());
00571 phiEfficiency[1]->Fill(recoStaGlbTrack->phi());
00572 }
00573
00574
00575
00576
00577 }