00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "RecoEgamma/Examples/plugins/DQMAnalyzer.h"
00022
00023 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00024 #include "FWCore/Framework/interface/EDAnalyzer.h"
00025 #include "FWCore/Framework/interface/Event.h"
00026 #include "FWCore/Framework/interface/MakerMacros.h"
00027 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00028 #include "FWCore/Common/interface/TriggerNames.h"
00029
00030 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00031 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00032 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00033 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00034 #include "DataFormats/EgammaReco/interface/ElectronSeed.h"
00035 #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
00036 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00037 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00038 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00039 #include "DataFormats/Common/interface/TriggerResults.h"
00040
00041 #include "HLTrigger/HLTfilters/interface/HLTHighLevel.h"
00042
00043 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00044 #include <iostream>
00045 #include "TMath.h"
00046 #include "TFile.h"
00047 #include "TH1F.h"
00048 #include "TH1I.h"
00049 #include "TH2F.h"
00050 #include "TProfile.h"
00051 #include "TTree.h"
00052 #include <iostream>
00053 #include <cassert>
00054
00055 using namespace reco;
00056
00057
00058 DQMAnalyzer::DQMAnalyzer(const edm::ParameterSet& conf)
00059 {
00060
00061 outputFile_ = conf.getParameter<std::string>("outputFile");
00062 electronCollection_=conf.getParameter<edm::InputTag>("electronCollection");
00063 matchingObjectCollection_ = conf.getParameter<edm::InputTag>("matchingObjectCollection");
00064 matchingCondition_ = conf.getParameter<std::string>("matchingCondition");
00065 readAOD_ = conf.getParameter<bool>("readAOD");
00066
00067 histfile_ = new TFile(outputFile_.c_str(),"RECREATE");
00068
00069
00070 assert(matchingCondition_=="Cone") ;
00071 maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
00072 maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
00073 deltaR_ = conf.getParameter<double>("DeltaR");
00074
00075 Selection_ = conf.getParameter<int>("Selection");
00076 massLow_ = conf.getParameter< double >("MassLow");
00077 massHigh_ = conf.getParameter< double >("MassHigh");
00078 TPchecksign_ = conf.getParameter<bool>("TPchecksign");
00079 TAGcheckclass_ = conf.getParameter<bool>("TAGcheckclass");
00080 PROBEetcut_ = conf.getParameter<bool>("PROBEetcut");
00081 PROBEcheckclass_ = conf.getParameter<bool>("PROBEcheckclass");
00082
00083 minEt_ = conf.getParameter<double>("MinEt");
00084 minPt_ = conf.getParameter<double>("MinPt");
00085 maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
00086 isEB_ = conf.getParameter<bool>("SelectEB");
00087 isEE_ = conf.getParameter<bool>("SelectEE");
00088 isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEBEEGap");
00089 isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
00090 isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
00091 eOverPMinBarrel_ = conf.getParameter<double>("MinEOverPBarrel");
00092 eOverPMaxBarrel_ = conf.getParameter<double>("MaxEOverPBarrel");
00093 eOverPMinEndcaps_ = conf.getParameter<double>("MinEOverPEndcaps");
00094 eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEOverPEndcaps");
00095 dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
00096 dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
00097 dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
00098 dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
00099 dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
00100 dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
00101 dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
00102 dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
00103 sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
00104 sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
00105 sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
00106 sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
00107 hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoEBarrel");
00108 hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoEEndcaps");
00109 mvaMin_ = conf.getParameter<double>("MinMVA");
00110 tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
00111 tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
00112 tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
00113 hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
00114 hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
00115 hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
00116 ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
00117 ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
00118
00119 triggerResults_ = conf.getParameter<edm::InputTag>("triggerResults");
00120 HLTPathsByName_= conf.getParameter<std::vector<std::string > >("hltPaths");
00121 HLTPathsByIndex_.resize(HLTPathsByName_.size());
00122
00123 edm::ParameterSet pset =
00124 conf.getParameter<edm::ParameterSet>("HistosConfigurationData") ;
00125
00126 etamin=pset.getParameter<double>("Etamin");
00127 etamax=pset.getParameter<double>("Etamax");
00128 phimin=pset.getParameter<double>("Phimin");
00129 phimax=pset.getParameter<double>("Phimax");
00130 ptmax=pset.getParameter<double>("Ptmax");
00131 pmax=pset.getParameter<double>("Pmax");
00132 eopmax=pset.getParameter<double>("Eopmax");
00133 eopmaxsht=pset.getParameter<double>("Eopmaxsht");
00134 detamin=pset.getParameter<double>("Detamin");
00135 detamax=pset.getParameter<double>("Detamax");
00136 dphimin=pset.getParameter<double>("Dphimin");
00137 dphimax=pset.getParameter<double>("Dphimax");
00138 detamatchmin=pset.getParameter<double>("Detamatchmin");
00139 detamatchmax=pset.getParameter<double>("Detamatchmax");
00140 dphimatchmin=pset.getParameter<double>("Dphimatchmin");
00141 dphimatchmax=pset.getParameter<double>("Dphimatchmax");
00142 fhitsmax=pset.getParameter<double>("Fhitsmax");
00143 lhitsmax=pset.getParameter<double>("Lhitsmax");
00144 nbineta=pset.getParameter<int>("Nbineta");
00145 nbineta2D=pset.getParameter<int>("Nbineta2D");
00146 nbinp=pset.getParameter<int>("Nbinp");
00147 nbinpt=pset.getParameter<int>("Nbinpt");
00148 nbinp2D=pset.getParameter<int>("Nbinp2D");
00149 nbinpt2D=pset.getParameter<int>("Nbinpt2D");
00150 nbinpteff=pset.getParameter<int>("Nbinpteff");
00151 nbinphi=pset.getParameter<int>("Nbinphi");
00152 nbinphi2D=pset.getParameter<int>("Nbinphi2D");
00153 nbineop=pset.getParameter<int>("Nbineop");
00154 nbineop2D=pset.getParameter<int>("Nbineop2D");
00155 nbinfhits=pset.getParameter<int>("Nbinfhits");
00156 nbinlhits=pset.getParameter<int>("Nbinlhits");
00157 nbinxyz=pset.getParameter<int>("Nbinxyz");
00158 nbindeta=pset.getParameter<int>("Nbindeta");
00159 nbindphi=pset.getParameter<int>("Nbindphi");
00160 nbindetamatch=pset.getParameter<int>("Nbindetamatch");
00161 nbindphimatch=pset.getParameter<int>("Nbindphimatch");
00162 nbindetamatch2D=pset.getParameter<int>("Nbindetamatch2D");
00163 nbindphimatch2D=pset.getParameter<int>("Nbindphimatch2D");
00164 nbinpoptrue= pset.getParameter<int>("Nbinpoptrue");
00165 poptruemin=pset.getParameter<double>("Poptruemin");
00166 poptruemax=pset.getParameter<double>("Poptruemax");
00167 nbinmee= pset.getParameter<int>("Nbinmee");
00168 meemin=pset.getParameter<double>("Meemin");
00169 meemax=pset.getParameter<double>("Meemax");
00170 nbinhoe= pset.getParameter<int>("Nbinhoe");
00171 hoemin=pset.getParameter<double>("Hoemin");
00172 hoemax=pset.getParameter<double>("Hoemax");
00173
00174 }
00175
00176
00177 DQMAnalyzer::~DQMAnalyzer()
00178 {
00179
00180
00181
00182 histfile_->Write();
00183 histfile_->Close();
00184 }
00185
00186 void
00187 DQMAnalyzer::beginJob(){
00188
00189 histfile_->cd();
00190
00191 nEvents_ = 0;
00192 nAfterTrigger_ = 0;
00193
00194
00195 std::string::size_type locSC = matchingObjectCollection_.label().find( "SuperCluster", 0 );
00196 std::string type ;
00197 if ( locSC != std::string::npos ) {
00198 std::cout << "Matching objects are SuperClusters "<< std::endl;
00199 type = "SC";
00200 } else {
00201 std::cout << "Didn't recognize input matching objects!! " << std::endl;
00202 }
00203
00204
00205
00206
00207
00208 std::string htitle, hlabel;
00209 hlabel="h_"+type+"Num"; htitle="# "+type+"s";
00210 h_matchingObjectNum = new TH1F( hlabel.c_str(), htitle.c_str(), nbinfhits,0.,fhitsmax );
00211 hlabel="h_"+type+"_eta"; htitle=type+" #eta";
00212 h_matchingObjectEta = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta,etamin,etamax);
00213 hlabel="h_"+type+"_abseta"; htitle=type+" |#eta|";
00214 h_matchingObjectAbsEta = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta/2,0.,etamax);
00215 hlabel="h_"+type+"_P"; htitle=type+" p";
00216 h_matchingObjectP = new TH1F( hlabel.c_str(), htitle.c_str(), nbinp,0.,pmax);
00217 hlabel="h_"+type+"_Pt"; htitle=type+" pt";
00218 h_matchingObjectPt = new TH1F( hlabel.c_str(),htitle.c_str(), nbinpteff,5.,ptmax);
00219 hlabel="h_"+type+"_phi"; htitle=type+" phi";
00220 h_matchingObjectPhi = new TH1F( hlabel.c_str(), htitle.c_str(), nbinphi,phimin,phimax);
00221 hlabel="h_"+type+"_z"; htitle=type+" z";
00222 h_matchingObjectZ = new TH1F( hlabel.c_str(), htitle.c_str(), nbinxyz , -25, 25 );
00223
00224 h_matchingObjectNum->GetXaxis()-> SetTitle("N_{SC}");
00225 h_matchingObjectNum->GetYaxis()-> SetTitle("Events");
00226 h_matchingObjectEta->GetXaxis()-> SetTitle("#eta_{SC}");
00227 h_matchingObjectEta->GetYaxis()-> SetTitle("Events");
00228 h_matchingObjectP->GetXaxis()-> SetTitle("E_{SC} (GeV)");
00229 h_matchingObjectP->GetYaxis()-> SetTitle("Events");
00230
00231 h_ele_matchingObjectEta_matched = new TH1F( "h_ele_matchingObjectEta_matched", "Efficiency vs matching SC #eta", nbineta,etamin,etamax);
00232 h_ele_matchingObjectEta_matched->Sumw2();
00233 h_ele_matchingObjectAbsEta_matched = new TH1F( "h_ele_matchingObjectAbsEta_matched", "Efficiency vs matching SC |#eta|", nbineta/2,0.,2.5);
00234 h_ele_matchingObjectAbsEta_matched->Sumw2();
00235 h_ele_matchingObjectPt_matched = new TH1F( "h_ele_matchingObjectPt_matched", "Efficiency vs matching SC E_{T}", nbinpteff,5.,ptmax);
00236 h_ele_matchingObjectPt_matched->Sumw2();
00237 h_ele_matchingObjectPhi_matched = new TH1F( "h_ele_matchingObjectPhi_matched", "Efficiency vs matching SC phi", nbinphi,phimin,phimax);
00238 h_ele_matchingObjectPhi_matched->Sumw2();
00239 h_ele_matchingObjectZ_matched = new TH1F( "h_ele_matchingObjectZ_matched", "Efficiency vs matching SC z", nbinxyz,-25,25);
00240 h_ele_matchingObjectZ_matched->Sumw2();
00241
00242
00243
00244
00245
00246 h_ele_vertexPt = new TH1F( "h_ele_vertexPt","ele transverse momentum",nbinpt,0.,ptmax);
00247 h_ele_Et = new TH1F( "h_ele_Et", "ele SC transverse energy", nbinpt,0.,ptmax);
00248 h_ele_vertexEta = new TH1F( "h_ele_vertexEta","ele momentum eta",nbineta,etamin,etamax);
00249 h_ele_vertexPhi = new TH1F( "h_ele_vertexPhi","ele momentum #phi",nbinphi,phimin,phimax);
00250 h_ele_vertexX = new TH1F( "h_ele_vertexX","ele vertex x",nbinxyz,-0.1,0.1 );
00251 h_ele_vertexY = new TH1F( "h_ele_vertexY","ele vertex y",nbinxyz,-0.1,0.1 );
00252 h_ele_vertexZ = new TH1F( "h_ele_vertexZ","ele vertex z",nbinxyz,-25, 25 );
00253 h_ele_vertexTIP = new TH1F( "h_ele_vertexTIP","ele transverse impact parameter (wrt bs)",90,0.,0.15);
00254 h_ele_charge = new TH1F( "h_ele_charge","ele charge",5,-2.,2.);
00255
00256 h_ele_charge->GetXaxis()-> SetTitle("charge");
00257 h_ele_charge->GetYaxis()-> SetTitle("Events");
00258
00259 h_ele_vertexPt->GetXaxis()-> SetTitle("p_{T vertex} (GeV/c)");
00260 h_ele_vertexPt->GetYaxis()-> SetTitle("Events");
00261
00262 h_ele_Et->GetXaxis()-> SetTitle("E_{T} (GeV)");
00263 h_ele_Et->GetYaxis()-> SetTitle("Events");
00264
00265 h_ele_vertexEta->GetXaxis()-> SetTitle("#eta");
00266 h_ele_vertexEta->GetYaxis()-> SetTitle("Events");
00267 h_ele_vertexPhi->GetXaxis()-> SetTitle("#phi (rad)");
00268 h_ele_vertexPhi->GetYaxis()-> SetTitle("Events");
00269
00270 h_ele_vertexX-> GetXaxis()-> SetTitle("x (cm)");
00271 h_ele_vertexX-> GetYaxis()-> SetTitle("Events");
00272 h_ele_vertexY-> GetXaxis()-> SetTitle("y (cm)");
00273 h_ele_vertexY-> GetYaxis()-> SetTitle("Events");
00274 h_ele_vertexZ-> GetXaxis()-> SetTitle("z (cm)");
00275 h_ele_vertexZ-> GetYaxis()-> SetTitle("Events");
00276
00277 h_ele_vertexTIP-> GetXaxis()-> SetTitle("TIP (cm)");
00278 h_ele_vertexTIP-> GetYaxis()-> SetTitle("Events");
00279
00280
00281
00282
00283
00284 histNum_= new TH1F("h_recEleNum","# rec electrons",20, 0.,20.);
00285
00286 histNum_-> GetXaxis()-> SetTitle("N_{ele}");
00287 histNum_-> GetYaxis()-> SetTitle("Events");
00288
00289
00290
00291
00292
00293 histSclEn_ = new TH1F("h_scl_energy","ele supercluster energy",nbinp,0.,pmax);
00294 histSclEt_ = new TH1F("h_scl_et","ele supercluster transverse energy",nbinpt,0.,ptmax);
00295 histSclEta_ = new TH1F("h_scl_eta","ele supercluster eta",nbineta,etamin,etamax);
00296 histSclPhi_ = new TH1F("h_scl_phi","ele supercluster phi",nbinphi,phimin,phimax);
00297 histSclSigEtaEta_ = new TH1F("h_scl_sigetaeta","ele supercluster sigma eta eta",100,0.,0.05);
00298
00299
00300
00301
00302
00303 h_ele_ambiguousTracks = new TH1F( "h_ele_ambiguousTracks", "ele # ambiguous tracks", 5,0.,5.);
00304 h_ele_ambiguousTracksVsEta = new TH2F( "h_ele_ambiguousTracksVsEta","ele # ambiguous tracks vs eta", nbineta2D,etamin,etamax,5,0.,5.);
00305 h_ele_ambiguousTracksVsPhi = new TH2F( "h_ele_ambiguousTracksVsPhi", "ele # ambiguous tracks vs phi", nbinphi2D,phimin,phimax,5,0.,5.);
00306 h_ele_ambiguousTracksVsPt = new TH2F( "h_ele_ambiguousTracksVsPt", "ele # ambiguous tracks vs pt", nbinpt2D,0.,ptmax,5,0.,5.);
00307 h_ele_foundHits = new TH1F( "h_ele_foundHits", "ele track # found hits", nbinfhits,0.,fhitsmax);
00308 h_ele_foundHitsVsEta = new TH2F( "h_ele_foundHitsVsEta", "ele track # found hits vs eta", nbineta2D,etamin,etamax,nbinfhits,0.,fhitsmax);
00309 h_ele_foundHitsVsPhi = new TH2F( "h_ele_foundHitsVsPhi", "ele track # found hits vs phi", nbinphi2D,phimin,phimax,nbinfhits,0.,fhitsmax);
00310 h_ele_foundHitsVsPt = new TH2F( "h_ele_foundHitsVsPt", "ele track # found hits vs pt", nbinpt2D,0.,ptmax,nbinfhits,0.,fhitsmax);
00311 h_ele_lostHits = new TH1F( "h_ele_lostHits", "ele track # lost hits", 5,0.,5.);
00312 h_ele_lostHitsVsEta = new TH2F( "h_ele_lostHitsVsEta", "ele track # lost hits vs eta", nbineta2D,etamin,etamax,nbinlhits,0.,lhitsmax);
00313 h_ele_lostHitsVsPhi = new TH2F( "h_ele_lostHitsVsPhi", "ele track # lost hits vs eta", nbinphi2D,phimin,phimax,nbinlhits,0.,lhitsmax);
00314 h_ele_lostHitsVsPt = new TH2F( "h_ele_lostHitsVsPt", "ele track # lost hits vs eta", nbinpt2D,0.,ptmax,nbinlhits,0.,lhitsmax);
00315 h_ele_chi2 = new TH1F( "h_ele_chi2", "ele track #chi^{2}", 100,0.,15.);
00316 h_ele_chi2VsEta = new TH2F( "h_ele_chi2VsEta", "ele track #chi^{2} vs eta", nbineta2D,etamin,etamax,50,0.,15.);
00317 h_ele_chi2VsPhi = new TH2F( "h_ele_chi2VsPhi", "ele track #chi^{2} vs phi", nbinphi2D,phimin,phimax,50,0.,15.);
00318 h_ele_chi2VsPt = new TH2F( "h_ele_chi2VsPt", "ele track #chi^{2} vs pt", nbinpt2D,0.,ptmax,50,0.,15.);
00319
00320 h_ele_foundHits->GetXaxis()-> SetTitle("N_{hits}");
00321 h_ele_foundHits->GetYaxis()-> SetTitle("Events");
00322 h_ele_lostHits->GetXaxis()-> SetTitle("N_{lost hits}");
00323 h_ele_lostHits->GetYaxis()-> SetTitle("Events");
00324 h_ele_chi2->GetXaxis()-> SetTitle("#Chi^{2}");
00325 h_ele_chi2->GetYaxis()-> SetTitle("Events");
00326
00327
00328
00329
00330
00331 h_ele_EoP = new TH1F( "h_ele_EoP", "ele E/P_{vertex}", nbineop,0.,eopmax);
00332
00333 h_ele_EeleOPout = new TH1F( "h_ele_EeleOPout", "ele E_{ele}/P_{out}", nbineop,0.,eopmax);
00334 h_ele_dEtaSc_propVtx = new TH1F( "h_ele_dEtaSc_propVtx", "ele #eta_{sc} - #eta_{tr}, prop from vertex", nbindetamatch,detamatchmin,detamatchmax);
00335 h_ele_dPhiSc_propVtx = new TH1F( "h_ele_dPhiSc_propVtx", "ele #phi_{sc} - #phi_{tr}, prop from vertex", nbindphimatch,dphimatchmin,dphimatchmax);
00336 h_ele_dEtaCl_propOut = new TH1F( "h_ele_dEtaCl_propOut", "ele #eta_{cl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
00337 h_ele_dPhiCl_propOut = new TH1F( "h_ele_dPhiCl_propOut", "ele #phi_{cl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
00338 h_ele_dEtaEleCl_propOut = new TH1F( "h_ele_dEtaEleCl_propOut", "ele #eta_{EleCl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
00339 h_ele_dPhiEleCl_propOut = new TH1F( "h_ele_dPhiEleCl_propOut", "ele #phi_{EleCl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
00340 h_ele_HoE = new TH1F("h_ele_HoE", "ele hadronic energy / em energy", nbinhoe, hoemin, hoemax) ;
00341 h_ele_outerP = new TH1F( "h_ele_outerP", "ele track outer p, mean", nbinp,0.,pmax);
00342 h_ele_outerP_mode = new TH1F( "h_ele_outerP_mode", "ele track outer p, mode", nbinp,0.,pmax);
00343 h_ele_outerPt = new TH1F( "h_ele_outerPt", "ele track outer p_{T}, mean", nbinpt,0.,ptmax);
00344 h_ele_outerPt_mode = new TH1F( "h_ele_outerPt_mode", "ele track outer p_{T}, mode", nbinpt,0.,ptmax);
00345
00346 h_ele_PinMnPout = new TH1F( "h_ele_PinMnPout", "ele track inner p - outer p, mean" ,nbinp,0.,200.);
00347 h_ele_PinMnPout_mode = new TH1F( "h_ele_PinMnPout_mode", "ele track inner p - outer p, mode" ,nbinp,0.,100.);
00348
00349 h_ele_mva = new TH1F( "h_ele_mva","ele identification mva",100,-1.,1.);
00350 h_ele_provenance = new TH1F( "h_ele_provenance","ele provenance",5,-2.,3.);
00351
00352 h_ele_PinMnPout->GetXaxis()-> SetTitle("P_{vertex} - P_{out} (GeV/c)");
00353 h_ele_PinMnPout->GetYaxis()-> SetTitle("Events");
00354 h_ele_PinMnPout_mode->GetXaxis()-> SetTitle("P_{vertex} - P_{out}, mode (GeV/c)");
00355 h_ele_PinMnPout_mode->GetYaxis()-> SetTitle("Events");
00356
00357 h_ele_outerP->GetXaxis()-> SetTitle("P_{out} (GeV/c)");
00358 h_ele_outerP->GetYaxis()-> SetTitle("Events");
00359 h_ele_outerP_mode->GetXaxis()-> SetTitle("P_{out} (GeV/c)");
00360 h_ele_outerP_mode->GetYaxis()-> SetTitle("Events");
00361
00362 h_ele_outerPt->GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
00363 h_ele_outerPt->GetYaxis()-> SetTitle("Events");
00364 h_ele_outerPt_mode->GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
00365 h_ele_outerPt_mode->GetYaxis()-> SetTitle("Events");
00366
00367 h_ele_EoP->GetXaxis()-> SetTitle("E/P_{vertex}");
00368 h_ele_EoP->GetYaxis()-> SetTitle("Events");
00369
00370
00371
00372 h_ele_EeleOPout->GetXaxis()-> SetTitle("E_{ele}/P_{out}");
00373 h_ele_EeleOPout->GetYaxis()-> SetTitle("Events");
00374
00375 h_ele_dEtaSc_propVtx-> GetXaxis()-> SetTitle("#eta_{sc} - #eta_{tr}");
00376 h_ele_dEtaSc_propVtx-> GetYaxis()-> SetTitle("Events");
00377 h_ele_dEtaCl_propOut-> GetXaxis()-> SetTitle("#eta_{seedcl} - #eta_{tr}");
00378 h_ele_dEtaCl_propOut-> GetYaxis()-> SetTitle("Events");
00379 h_ele_dEtaEleCl_propOut-> GetXaxis()-> SetTitle("#eta_{elecl} - #eta_{tr}");
00380 h_ele_dEtaEleCl_propOut-> GetYaxis()-> SetTitle("Events");
00381 h_ele_dPhiSc_propVtx-> GetXaxis()-> SetTitle("#phi_{sc} - #phi_{tr} (rad)");
00382 h_ele_dPhiSc_propVtx-> GetYaxis()-> SetTitle("Events");
00383 h_ele_dPhiCl_propOut-> GetXaxis()-> SetTitle("#phi_{seedcl} - #phi_{tr} (rad)");
00384 h_ele_dPhiCl_propOut-> GetYaxis()-> SetTitle("Events");
00385 h_ele_dPhiEleCl_propOut-> GetXaxis()-> SetTitle("#phi_{elecl} - #phi_{tr} (rad)");
00386 h_ele_dPhiEleCl_propOut-> GetYaxis()-> SetTitle("Events");
00387 h_ele_HoE-> GetXaxis()-> SetTitle("H/E") ;
00388 h_ele_HoE-> GetYaxis()-> SetTitle("Events") ;
00389
00390
00391
00392
00393
00394 h_ele_tkSumPt_dr03 = new TH1F("h_ele_tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.);
00395 h_ele_ecalRecHitSumEt_dr03= new TH1F("h_ele_ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.);
00396 h_ele_hcalDepth1TowerSumEt_dr03= new TH1F("h_ele_hcalDepth1TowerSumEt_dr03","hcal depth1 isolation sum, dR=0.3",100,0.0,20.);
00397 h_ele_hcalDepth2TowerSumEt_dr03= new TH1F("h_ele_hcalDepth2TowerSumEt_dr03","hcal depth2 isolation sum, dR=0.3",100,0.0,20.);
00398 h_ele_tkSumPt_dr04= new TH1F("h_ele_tkSumPt_dr04","hcal isolation sum",100,0.0,20.);
00399 h_ele_ecalRecHitSumEt_dr04= new TH1F("h_ele_ecalRecHitSumEt_dr04","ecal isolation sum, dR=0.4",100,0.0,20.);
00400 h_ele_hcalDepth1TowerSumEt_dr04= new TH1F("h_ele_hcalDepth1TowerSumEt_dr04","hcal depth1 isolation sum, dR=0.4",100,0.0,20.);
00401 h_ele_hcalDepth2TowerSumEt_dr04= new TH1F("h_ele_hcalDepth2TowerSumEt_dr04","hcal depth2 isolation sum, dR=0.4",100,0.0,20.);
00402
00403
00404
00405
00406 h_ele_mee_os = new TH1F( "h_ele_mee_os", "ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax );
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445 }
00446
00447
00448 void
00449 DQMAnalyzer::endJob(){
00450
00451 histfile_->cd();
00452 std::cout << "efficiency calculation " << std::endl;
00453
00454
00455 TH1F *h_ele_ptEff = (TH1F*)h_ele_matchingObjectPt_matched->Clone("h_ele_ptEff");
00456 h_ele_ptEff->Reset();
00457 h_ele_ptEff->Divide(h_ele_matchingObjectPt_matched,h_matchingObjectPt,1,1,"b");
00458 h_ele_ptEff->GetXaxis()->SetTitle("p_{T} (GeV/c)");
00459 h_ele_ptEff->GetYaxis()->SetTitle("Efficiency");
00460
00461
00462 TH1F *h_ele_etaEff = (TH1F*)h_ele_matchingObjectEta_matched->Clone("h_ele_etaEff");
00463 h_ele_etaEff->Reset();
00464 h_ele_etaEff->Divide(h_ele_matchingObjectEta_matched,h_matchingObjectEta,1,1,"b");
00465 h_ele_etaEff->Print();
00466 h_ele_etaEff->GetXaxis()->SetTitle("#eta");
00467 h_ele_etaEff->GetYaxis()->SetTitle("Efficiency");
00468
00469
00470 TH1F *h_ele_absetaEff = (TH1F*)h_ele_matchingObjectAbsEta_matched->Clone("h_ele_absetaEff");
00471 h_ele_absetaEff->Reset();
00472 h_ele_absetaEff->Divide(h_ele_matchingObjectAbsEta_matched,h_matchingObjectAbsEta,1,1,"b");
00473 h_ele_absetaEff->GetXaxis()->SetTitle("|#eta|");
00474 h_ele_absetaEff->GetYaxis()->SetTitle("Efficiency");
00475
00476
00477 TH1F *h_ele_phiEff = (TH1F*)h_ele_matchingObjectPhi_matched->Clone("h_ele_phiEff");
00478 h_ele_phiEff->Reset();
00479 h_ele_phiEff->Divide(h_ele_matchingObjectPhi_matched,h_matchingObjectPhi,1,1,"b");
00480 h_ele_phiEff->GetXaxis()->SetTitle("#phi (rad)");
00481 h_ele_phiEff->GetYaxis()->SetTitle("Efficiency");
00482
00483
00484 TH1F *h_ele_zEff = (TH1F*)h_ele_matchingObjectZ_matched->Clone("h_ele_zEff");
00485 h_ele_zEff->Reset();
00486 h_ele_zEff->Divide(h_ele_matchingObjectZ_matched,h_matchingObjectZ,1,1,"b");
00487 h_ele_zEff->Print();
00488 h_ele_zEff->GetXaxis()->SetTitle("z (cm)");
00489 h_ele_zEff->GetYaxis()->SetTitle("Efficiency");
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502 h_matchingObjectNum->Write();
00503
00504
00505
00506 histNum_->Write();
00507
00508
00509 h_matchingObjectEta->Write();
00510 h_matchingObjectAbsEta->Write();
00511 h_matchingObjectP->Write();
00512 h_matchingObjectPt->Write();
00513 h_matchingObjectPhi->Write();
00514 h_matchingObjectZ->Write();
00515
00516
00517
00518
00519 h_ele_charge->Write();
00520
00521
00522 h_ele_vertexPt->Write();
00523 h_ele_vertexEta->Write();
00524 h_ele_vertexPhi->Write();
00525 h_ele_vertexX->Write();
00526 h_ele_vertexY ->Write();
00527 h_ele_vertexZ->Write();
00528
00529 h_ele_vertexTIP->Write();
00530
00531 h_ele_Et->Write();
00532
00533 h_ele_matchingObjectPt_matched->Write();
00534 h_ele_matchingObjectAbsEta_matched->Write();
00535 h_ele_matchingObjectEta_matched->Write();
00536 h_ele_matchingObjectPhi_matched->Write();
00537 h_ele_matchingObjectZ_matched->Write();
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551 histSclEn_->Write();
00552 histSclEt_->Write();
00553 histSclEta_->Write();
00554 histSclPhi_->Write();
00555 histSclSigEtaEta_->Write();
00556
00557
00558 h_ele_ambiguousTracks->Write();
00559 h_ele_ambiguousTracksVsEta->Write();
00560 h_ele_ambiguousTracksVsPhi->Write();
00561 h_ele_ambiguousTracksVsPt->Write();
00562
00563 h_ele_foundHits->Write();
00564 h_ele_foundHitsVsEta->Write();
00565 h_ele_foundHitsVsPhi->Write();
00566 h_ele_foundHitsVsPt->Write();
00567
00568 h_ele_lostHits->Write();
00569 h_ele_lostHitsVsEta->Write();
00570 h_ele_lostHitsVsPhi->Write();
00571 h_ele_lostHitsVsPt->Write();
00572
00573 h_ele_chi2 ->Write();
00574 h_ele_chi2VsEta ->Write();
00575 h_ele_chi2VsPhi ->Write();
00576 h_ele_chi2VsPt->Write();
00577
00578 h_ele_PinMnPout->Write();
00579 h_ele_PinMnPout_mode->Write();
00580 h_ele_outerP ->Write();
00581 h_ele_outerP_mode->Write();
00582 h_ele_outerPt->Write();
00583 h_ele_outerPt_mode ->Write();
00584
00585
00586 h_ele_EoP ->Write();
00587
00588 h_ele_EeleOPout->Write();
00589 h_ele_dEtaSc_propVtx->Write();
00590 h_ele_dPhiSc_propVtx->Write();
00591 h_ele_dEtaCl_propOut->Write();
00592 h_ele_dPhiCl_propOut->Write();
00593 h_ele_dEtaEleCl_propOut->Write();
00594 h_ele_dPhiEleCl_propOut->Write();
00595 h_ele_HoE->Write();
00596
00597
00598
00599 h_ele_mee_os-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00600 h_ele_mee_os-> GetYaxis()-> SetTitle("Events");
00601 h_ele_mee_os->Write();
00602
00603
00604
00605
00606
00607
00608 h_ele_etaEff->Write();
00609 h_ele_zEff->Write();
00610 h_ele_phiEff->Write();
00611 h_ele_absetaEff->Write();
00612 h_ele_ptEff->Write();
00613
00614
00615
00616 h_ele_mva->Write();
00617 h_ele_provenance->Write();
00618
00619
00620 h_ele_tkSumPt_dr03->GetXaxis()->SetTitle("TkIsoSum, cone 0.3 (GeV/c)");
00621 h_ele_tkSumPt_dr03->GetYaxis()->SetTitle("Events");
00622 h_ele_ecalRecHitSumEt_dr03->GetXaxis()->SetTitle("EcalIsoSum, cone 0.3 (GeV)");
00623 h_ele_ecalRecHitSumEt_dr03->GetYaxis()->SetTitle("Events");
00624 h_ele_hcalDepth1TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.3 (GeV)");
00625 h_ele_hcalDepth1TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
00626 h_ele_hcalDepth2TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.3 (GeV)");
00627 h_ele_hcalDepth2TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
00628 h_ele_tkSumPt_dr04->GetXaxis()->SetTitle("TkIsoSum, cone 0.4 (GeV/c)");
00629 h_ele_tkSumPt_dr04->GetYaxis()->SetTitle("Events");
00630 h_ele_ecalRecHitSumEt_dr04->GetXaxis()->SetTitle("EcalIsoSum, cone 0.4 (GeV)");
00631 h_ele_ecalRecHitSumEt_dr04->GetYaxis()->SetTitle("Events");
00632 h_ele_hcalDepth1TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.4 (GeV)");
00633 h_ele_hcalDepth1TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
00634 h_ele_hcalDepth2TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.4 (GeV)");
00635 h_ele_hcalDepth2TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
00636
00637 h_ele_tkSumPt_dr03->Write();
00638 h_ele_ecalRecHitSumEt_dr03->Write();
00639 h_ele_hcalDepth1TowerSumEt_dr03->Write();
00640 h_ele_hcalDepth2TowerSumEt_dr03->Write();
00641 h_ele_tkSumPt_dr04->Write();
00642 h_ele_ecalRecHitSumEt_dr04->Write();
00643 h_ele_hcalDepth1TowerSumEt_dr04->Write();
00644 h_ele_hcalDepth2TowerSumEt_dr04->Write();
00645
00646 }
00647
00648
00649 void
00650 DQMAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00651 {
00652 edm::LogInfo("DQMAnalyzer::analyze")<<"Treating event "<<iEvent.id() ;
00653 nEvents_++ ;
00654 if (!trigger(iEvent)) return ;
00655 nAfterTrigger_++ ;
00656 edm::LogInfo("DQMAnalyzer::analyze")<<"Trigger OK" ;
00657 edm::Handle<reco::GsfElectronCollection> gsfElectrons;
00658 iEvent.getByLabel(electronCollection_,gsfElectrons);
00659 edm::LogInfo("DQMAnalyzer::analyze")<<"Event has "<<gsfElectrons.product()->size()<<" electrons" ;
00660 edm::Handle<reco::SuperClusterCollection> recoClusters;
00661 iEvent.getByLabel(matchingObjectCollection_,recoClusters);
00662 edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
00663 iEvent.getByType(recoBeamSpotHandle);
00664 const reco::BeamSpot bs = *recoBeamSpotHandle;
00665 histNum_->Fill((*gsfElectrons).size());
00666
00667
00668 reco::GsfElectronCollection::const_iterator gsfIter ;
00669 for
00670 ( gsfIter=gsfElectrons->begin() ;
00671 gsfIter!=gsfElectrons->end();
00672 gsfIter++ )
00673 {
00674
00675 double vertexTIP =
00676 (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
00677 (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
00678 vertexTIP = sqrt(vertexTIP) ;
00679
00680
00681 if (!selected(gsfIter,vertexTIP)) continue ;
00682
00683
00684 h_ele_charge->Fill( gsfIter->charge() );
00685
00686 h_ele_vertexPt->Fill( gsfIter->pt() );
00687 h_ele_Et->Fill( gsfIter->superCluster()->energy()/cosh( gsfIter->superCluster()->eta()) );
00688 h_ele_vertexEta->Fill( gsfIter->eta() );
00689 h_ele_vertexPhi->Fill( gsfIter->phi() );
00690 h_ele_vertexX->Fill( gsfIter->vertex().x() );
00691 h_ele_vertexY->Fill( gsfIter->vertex().y() );
00692 h_ele_vertexZ->Fill( gsfIter->vertex().z() );
00693 h_ele_vertexTIP->Fill( vertexTIP );
00694
00695
00696 reco::SuperClusterRef sclRef = gsfIter->superCluster() ;
00697
00698
00699
00700 histSclEn_->Fill(sclRef->energy());
00701 double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
00702 double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
00703 histSclEt_->Fill(sclRef->energy()*(Rt/R));
00704 histSclEta_->Fill(sclRef->eta());
00705 histSclPhi_->Fill(sclRef->phi());
00706 histSclSigEtaEta_->Fill(gsfIter->scSigmaEtaEta());
00707
00708
00709 h_ele_ambiguousTracks->Fill( gsfIter->ambiguousGsfTracksSize() );
00710 h_ele_ambiguousTracksVsEta->Fill( gsfIter->eta(), gsfIter->ambiguousGsfTracksSize() );
00711 h_ele_ambiguousTracksVsPhi->Fill( gsfIter->phi(), gsfIter->ambiguousGsfTracksSize() );
00712 h_ele_ambiguousTracksVsPt->Fill( gsfIter->pt(), gsfIter->ambiguousGsfTracksSize() );
00713 if (!readAOD_)
00714 {
00715 h_ele_foundHits->Fill( gsfIter->gsfTrack()->numberOfValidHits() );
00716 h_ele_foundHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
00717 h_ele_foundHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
00718 h_ele_foundHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfValidHits() );
00719 h_ele_lostHits->Fill( gsfIter->gsfTrack()->numberOfLostHits() );
00720 h_ele_lostHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
00721 h_ele_lostHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
00722 h_ele_lostHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfLostHits() );
00723 h_ele_chi2->Fill( gsfIter->gsfTrack()->normalizedChi2() );
00724 h_ele_chi2VsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
00725 h_ele_chi2VsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
00726 h_ele_chi2VsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->normalizedChi2() );
00727 }
00728
00729
00730 if (!readAOD_)
00731 {
00732 h_ele_PinMnPout->Fill( gsfIter->gsfTrack()->innerMomentum().R() - gsfIter->gsfTrack()->outerMomentum().R() );
00733 h_ele_outerP->Fill( gsfIter->gsfTrack()->outerMomentum().R() );
00734 h_ele_outerPt->Fill( gsfIter->gsfTrack()->outerMomentum().Rho() );
00735 }
00736
00737
00738 h_ele_PinMnPout_mode->Fill( gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
00739 h_ele_outerP_mode->Fill( gsfIter->trackMomentumOut().R() );
00740 h_ele_outerPt_mode->Fill( gsfIter->trackMomentumOut().Rho() );
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757 h_ele_EoP->Fill( gsfIter->eSuperClusterOverP() );
00758 h_ele_EeleOPout->Fill( gsfIter->eEleClusterOverPout() );
00759 h_ele_dEtaSc_propVtx->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
00760 h_ele_dPhiSc_propVtx->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
00761 h_ele_dEtaCl_propOut->Fill(gsfIter->deltaEtaSeedClusterTrackAtCalo());
00762 h_ele_dPhiCl_propOut->Fill(gsfIter->deltaPhiSeedClusterTrackAtCalo());
00763 h_ele_dEtaEleCl_propOut->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
00764 h_ele_dPhiEleCl_propOut->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
00765 h_ele_HoE->Fill(gsfIter->hadronicOverEm());
00766
00767
00768
00769
00770
00771 h_ele_mva->Fill(gsfIter->mva()) ;
00772 if (gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(1.) ;
00773 if (gsfIter->trackerDrivenSeed()) h_ele_provenance->Fill(-1.) ;
00774 if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(0.);
00775 if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(-2.);
00776 if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(2.);
00777
00778 h_ele_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
00779 h_ele_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
00780 h_ele_hcalDepth1TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth1TowerSumEt());
00781 h_ele_hcalDepth2TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth2TowerSumEt());
00782 h_ele_tkSumPt_dr04->Fill(gsfIter->dr04TkSumPt());
00783 h_ele_ecalRecHitSumEt_dr04->Fill(gsfIter->dr04EcalRecHitSumEt());
00784 h_ele_hcalDepth1TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth1TowerSumEt());
00785 h_ele_hcalDepth2TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth2TowerSumEt());
00786 }
00787
00788
00789 int matchingObjectNum=0 ;
00790 reco::SuperClusterCollection::const_iterator moIter ;
00791 for
00792 ( moIter=recoClusters->begin() ;
00793 moIter!=recoClusters->end() ;
00794 moIter++ )
00795 {
00796
00797 matchingObjectNum++;
00798
00799 if
00800 ( moIter->energy()/cosh(moIter->eta())>maxPtMatchingObject_ ||
00801 fabs(moIter->eta())> maxAbsEtaMatchingObject_ )
00802 { continue ; }
00803
00804
00805
00806
00807
00808
00809 h_matchingObjectEta->Fill( moIter->eta() );
00810 h_matchingObjectAbsEta->Fill( fabs(moIter->eta()) );
00811 h_matchingObjectP->Fill( moIter->energy() );
00812 h_matchingObjectPt->Fill( moIter->energy()/cosh(moIter->eta()) );
00813 h_matchingObjectPhi->Fill( moIter->phi() );
00814 h_matchingObjectZ->Fill( moIter->z() );
00815
00816
00817 bool okGsfFound = false;
00818 double gsfOkRatio = 999999.;
00819 reco::GsfElectron bestGsfElectron ;
00820 reco::GsfElectronCollection::const_iterator gsfIter ;
00821 for
00822 ( gsfIter=gsfElectrons->begin() ;
00823 gsfIter!=gsfElectrons->end() ;
00824 gsfIter++ )
00825 {
00826 double vertexTIP =
00827 (gsfIter->vertex().x()-bs.position().x()) * (gsfIter->vertex().x()-bs.position().x()) +
00828 (gsfIter->vertex().y()-bs.position().y()) * (gsfIter->vertex().y()-bs.position().y()) ;
00829 vertexTIP = sqrt(vertexTIP) ;
00830
00831
00832 if (!selected(gsfIter,vertexTIP)) continue ;
00833
00834 if (Selection_ >= 4)
00835 {
00836 reco::GsfElectronCollection::const_iterator gsfIter2 ;
00837 for
00838 ( gsfIter2=gsfIter+1 ;
00839 gsfIter2!=gsfElectrons->end() ;
00840 gsfIter2++ )
00841 {
00842 math::XYZTLorentzVector p12 = (*gsfIter).p4()+(*gsfIter2).p4() ;
00843 float mee2 = p12.Dot(p12) ;
00844 bool opsign = (gsfIter->charge()*gsfIter2->charge()<0.) ;
00845 float invMass = sqrt(mee2) ;
00846
00847 if (TPchecksign_ && !opsign) break ;
00848
00849
00850 if(TAGcheckclass_ && (gsfIter->classification()==GsfElectron::SHOWERING || gsfIter->isGap())) break;
00851
00852
00853 if(PROBEetcut_ && (gsfIter2->superCluster()->energy()/cosh(gsfIter2->superCluster()->eta())<minEt_)) continue;
00854 if(PROBEcheckclass_ && (gsfIter2->classification()==GsfElectron::SHOWERING || gsfIter2->isGap())) continue;
00855
00856 if( invMass < massLow_ || invMass > massHigh_ ) continue ;
00857
00858 h_ele_mee_os->Fill(invMass) ;
00859 bestGsfElectron =* gsfIter2 ;
00860 okGsfFound = true ;
00861 }
00862 }
00863 else
00864 {
00865 reco::GsfElectronCollection::const_iterator gsfIter2 ;
00866 for
00867 ( gsfIter2=gsfIter+1;
00868 gsfIter2!=gsfElectrons->end() ;
00869 gsfIter2++ )
00870 {
00871 math::XYZTLorentzVector p12 = (*gsfIter).p4()+(*gsfIter2).p4() ;
00872 float mee2 = p12.Dot(p12) ;
00873
00874 float invMass = sqrt(mee2) ;
00875 h_ele_mee_os->Fill(invMass) ;
00876 }
00877
00878
00879 if ( matchingCondition_ == "Cone" )
00880 {
00881 double dphi = gsfIter->phi()-moIter->phi() ;
00882 if (fabs(dphi)>CLHEP::pi)
00883 { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
00884 double deltaR = sqrt(std::pow((moIter->eta()-gsfIter->eta()),2) + std::pow(dphi,2)) ;
00885 if ( deltaR < deltaR_ )
00886 {
00887
00888
00889 double tmpGsfRatio = gsfIter->p()/moIter->energy();
00890 if ( fabs(tmpGsfRatio-1) < fabs(gsfOkRatio-1) && Selection_ != 4 )
00891 {
00892 gsfOkRatio = tmpGsfRatio;
00893 bestGsfElectron=*gsfIter;
00894 okGsfFound = true;
00895 }
00896
00897 }
00898 }
00899 }
00900 }
00901
00902
00903 if (okGsfFound)
00904 {
00905
00906 h_ele_matchingObjectPt_matched->Fill( moIter->energy()/cosh(moIter->eta()) );
00907 h_ele_matchingObjectPhi_matched->Fill( moIter->phi() );
00908 h_ele_matchingObjectAbsEta_matched->Fill( fabs(moIter->eta()) );
00909 h_ele_matchingObjectEta_matched->Fill( moIter->eta() );
00910 h_ele_matchingObjectZ_matched->Fill( moIter->z() );
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927 reco::SuperClusterRef sclRef = bestGsfElectron.superCluster() ;
00928
00929
00930
00931 }
00932
00933 }
00934
00935 h_matchingObjectNum->Fill(matchingObjectNum) ;
00936
00937 }
00938
00939 bool DQMAnalyzer::trigger( const edm::Event & e )
00940 {
00941
00942 edm::Handle<edm::TriggerResults> triggerResults ;
00943 e.getByLabel(triggerResults_,triggerResults) ;
00944
00945 bool accept = false ;
00946
00947 if (triggerResults.isValid())
00948 {
00949
00950
00951
00952 const edm::TriggerNames & triggerNames = e.triggerNames(*triggerResults);
00953 if (nEvents_==1)
00954 {
00955 for (unsigned int i=0; i<triggerNames.size(); i++)
00956 {
00957
00958 }
00959 }
00960
00961 unsigned int n = HLTPathsByName_.size() ;
00962 for (unsigned int i=0; i!=n; i++)
00963 {
00964 HLTPathsByIndex_[i]=triggerNames.triggerIndex(HLTPathsByName_[i]) ;
00965 }
00966
00967
00968 if (n==0)
00969 {
00970 n=triggerResults->size() ;
00971 HLTPathsByName_.resize(n) ;
00972 HLTPathsByIndex_.resize(n) ;
00973 for ( unsigned int i=0 ; i!=n ; i++)
00974 {
00975 HLTPathsByName_[i]=triggerNames.triggerName(i) ;
00976 HLTPathsByIndex_[i]=i ;
00977 }
00978 }
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997 unsigned int fired=0 ;
00998 for ( unsigned int i=0 ; i!=n ; i++ )
00999 {
01000 if (HLTPathsByIndex_[i]<triggerResults->size())
01001 {
01002 if (triggerResults->accept(HLTPathsByIndex_[i]))
01003 {
01004 fired++ ;
01005
01006 accept = true ;
01007 }
01008 }
01009 }
01010
01011 }
01012
01013 return accept ;
01014 }
01015
01016 bool DQMAnalyzer::selected( const reco::GsfElectronCollection::const_iterator & gsfIter , double vertexTIP )
01017 {
01018 if ((Selection_>0)&&generalCut(gsfIter)) return false ;
01019 if ((Selection_>=1)&&etCut(gsfIter)) return false ;
01020 if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP)) return false ;
01021 if ((Selection_>=3)&&idCut(gsfIter)) return false ;
01022 return true ;
01023 }
01024
01025 bool DQMAnalyzer::generalCut( const reco::GsfElectronCollection::const_iterator & gsfIter)
01026 {
01027 if (fabs(gsfIter->eta())>maxAbsEta_) return true ;
01028 if (gsfIter->pt()<minPt_) return true ;
01029
01030 if (gsfIter->isEB() && isEE_) return true ;
01031 if (gsfIter->isEE() && isEB_) return true ;
01032 if (gsfIter->isEBEEGap() && isNotEBEEGap_) return true ;
01033
01034 if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) return true ;
01035 if (gsfIter->trackerDrivenSeed() && isEcalDriven_) return true ;
01036
01037 return false ;
01038 }
01039
01040 bool DQMAnalyzer::etCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
01041 {
01042 if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) return true ;
01043
01044 return false ;
01045 }
01046
01047 bool DQMAnalyzer::isolationCut( const reco::GsfElectronCollection::const_iterator & gsfIter, double vertexTIP )
01048 {
01049 if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_) return true ;
01050 if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_) return true ;
01051
01052 if (gsfIter->dr03TkSumPt() > tkIso03Max_) return true ;
01053 if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) return true ;
01054 if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) return true ;
01055 if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) return true ;
01056 if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) return true ;
01057 if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) return true ;
01058
01059 return false ;
01060 }
01061
01062 bool DQMAnalyzer::idCut( const reco::GsfElectronCollection::const_iterator & gsfIter )
01063 {
01064 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) return true ;
01065 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) return true ;
01066 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) return true ;
01067 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) return true ;
01068 if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) return true ;
01069 if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) return true ;
01070 if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) return true ;
01071 if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) return true ;
01072 if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) return true ;
01073 if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) return true ;
01074 if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) return true ;
01075 if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) return true ;
01076 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) return true ;
01077 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) return true ;
01078 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) return true ;
01079 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) return true ;
01080 if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) return true ;
01081 if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) return true ;
01082
01083 return false ;
01084 }
01085