00001
00002
00003
00004
00005
00006
00007 #include "TLorentzVector.h"
00008 #include "DataFormats/Math/interface/deltaR.h"
00009 #include "DQM/Physics/src/TopDiLeptonDQM.h"
00010 #include "FWCore/Common/interface/TriggerNames.h"
00011
00012 using namespace std;
00013 using namespace edm;
00014
00015 TopDiLeptonDQM::TopDiLeptonDQM( const edm::ParameterSet& ps ) {
00016
00017 initialize();
00018
00019 moduleName_ = ps.getUntrackedParameter<string>("moduleName");
00020 fileOutput_ = ps.getParameter<bool>("fileOutput");
00021 outputFile_ = ps.getUntrackedParameter<string>("outputFile");
00022 triggerResults_ = ps.getParameter<edm::InputTag>("TriggerResults");
00023 hltPaths_ = ps.getParameter<vector<string> >("hltPaths");
00024 hltPaths_sig_ = ps.getParameter<vector<string> >("hltPaths_sig");
00025 hltPaths_trig_ = ps.getParameter<vector<string> >("hltPaths_trig");
00026
00027 vertex_ = ps.getParameter<edm::InputTag>("vertexCollection");
00028 vertex_X_cut_ = ps.getParameter<double>("vertex_X_cut");
00029 vertex_Y_cut_ = ps.getParameter<double>("vertex_Y_cut");
00030 vertex_Z_cut_ = ps.getParameter<double>("vertex_Z_cut");
00031
00032 muons_ = ps.getParameter<edm::InputTag>("muonCollection");
00033 muon_pT_cut_ = ps.getParameter<double>("muon_pT_cut");
00034 muon_eta_cut_ = ps.getParameter<double>("muon_eta_cut");
00035 muon_iso_cut_ = ps.getParameter<double>("muon_iso_cut");
00036
00037 elecs_ = ps.getParameter<edm::InputTag>("elecCollection");
00038 elec_pT_cut_ = ps.getParameter<double>("elec_pT_cut");
00039 elec_eta_cut_ = ps.getParameter<double>("elec_eta_cut");
00040 elec_iso_cut_ = ps.getParameter<double>("elec_iso_cut");
00041 elec_emf_cut_ = ps.getParameter<double>("elec_emf_cut");
00042
00043 MassWindow_up_ = ps.getParameter<double>("MassWindow_up");
00044 MassWindow_down_ = ps.getParameter<double>("MassWindow_down");
00045
00046 for(int i=0; i<100; ++i) {
00047 N_sig[i] = 0;
00048 N_trig[i] = 0;
00049 Eff[i] = 0.;
00050 }
00051
00052 N_mumu = 0;
00053 N_muel = 0;
00054 N_elel = 0;
00055
00056
00057 if( fileOutput_ ) {
00058 const char *fileName = outputFile_.c_str();
00059 outfile.open (fileName);
00060 }
00061
00062 }
00063
00064
00065 TopDiLeptonDQM::~TopDiLeptonDQM() {
00066
00067 }
00068
00069
00070 void TopDiLeptonDQM::initialize() {
00071
00072 }
00073
00074
00075 void TopDiLeptonDQM::beginJob() {
00076
00077 dbe_ = Service<DQMStore>().operator->();
00078
00079 dbe_->setCurrentFolder(moduleName_);
00080
00081 Events_ = dbe_->book1D("00_Events", "Isolated dilepton events", 5, 0., 5.);
00082 Events_->setBinLabel( 2, "#mu #mu", 1);
00083 Events_->setBinLabel( 3, "#mu e", 1);
00084 Events_->setBinLabel( 4, "e e", 1);
00085
00086 Trigs_ = dbe_->book1D("01_Trigs", "Fired muon/electron triggers", 15, 0., 15.);
00087 TriggerEff_ = dbe_->book1D("02_TriggerEff", "HL Trigger Efficiencies", 10, 0., 10.);
00088 TriggerEff_->setTitle("HL Trigger Efficiencies #epsilon_{signal} = #frac{[signal] && [control]}{[control]}");
00089 Ntracks_ = dbe_->book1D("Ntracks", "Number of tracks", 50, 0., 50.);
00090
00091 Nmuons_ = dbe_->book1D("03_Nmuons", "Number of muons", 20, 0., 10.);
00092 Nmuons_iso_ = dbe_->book1D("04_Nmuons_iso", "Number of isolated muons", 20, 0., 10.);
00093 Nmuons_charge_ = dbe_->book1D("Nmuons_charge", "Number of muons * moun charge", 19, -10., 10.);
00094 VxVy_muons_ = dbe_->book2D("VxVy_muons", "Vertex x-y-positon (global)", 40, -1., 1., 40 , -1., 1.);
00095 Vz_muons_ = dbe_->book1D("Vz_muons", "Vertex z-positon (global)", 40, -20., 20.);
00096 pT_muons_ = dbe_->book1D("pT_muons", "P_T of muons", 40, 0., 200.);
00097 eta_muons_ = dbe_->book1D("eta_muons", "Eta of muons", 50, -5., 5.);
00098 phi_muons_ = dbe_->book1D("phi_muons", "Phi of muons", 40, -4., 4.);
00099
00100 Nelecs_ = dbe_->book1D("05_Nelecs", "Number of electrons", 20, 0., 10.);
00101 Nelecs_iso_ = dbe_->book1D("06_Nelecs_iso", "Number of isolated electrons", 20, 0., 10.);
00102 Nelecs_charge_ = dbe_->book1D("Nelecs_charge", "Number of elecs * elec charge", 19, -10., 10.);
00103 HoverE_elecs_ = dbe_->book1D("HoverE_elecs", "Hadronic over Ecal energy", 50, 0., 1.);
00104 pT_elecs_ = dbe_->book1D("pT_elecs", "P_T of electrons", 40, 0., 200.);
00105 eta_elecs_ = dbe_->book1D("eta_elecs", "Eta of electrons", 50, -5., 5.);
00106 phi_elecs_ = dbe_->book1D("phi_elecs", "Phi of electrons", 40, -4., 4.);
00107
00108 MuIso_emEt03_ = dbe_->book1D("MuIso_emEt03", "Muon emEt03", 20, 0., 20.);
00109 MuIso_hadEt03_ = dbe_->book1D("MuIso_hadEt03", "Muon hadEt03", 20, 0., 20.);
00110 MuIso_hoEt03_ = dbe_->book1D("MuIso_hoEt03", "Muon hoEt03", 20, 0., 20.);
00111 MuIso_nJets03_ = dbe_->book1D("MuIso_nJets03", "Muon nJets03", 10, 0., 10.);
00112 MuIso_nTracks03_ = dbe_->book1D("MuIso_nTracks03", "Muon nTracks03", 20, 0., 20.);
00113 MuIso_sumPt03_ = dbe_->book1D("MuIso_sumPt03", "Muon sumPt03", 20, 0., 40.);
00114 MuIso_CombRelIso03_ = dbe_->book1D("07_MuIso_CombRelIso03", "Muon CombRelIso03", 20, 0., 1.);
00115
00116 ElecIso_cal_ = dbe_->book1D("ElecIso_cal", "Electron Iso_cal", 21, -1., 20.);
00117 ElecIso_trk_ = dbe_->book1D("ElecIso_trk", "Electron Iso_trk", 21, -2., 40.);
00118 ElecIso_CombRelIso_ = dbe_->book1D("08_ElecIso_CombRelIso", "Electron CombRelIso", 20, 0., 1.);
00119
00120 const int nbins = 200;
00121
00122 double logmin = 0.;
00123 double logmax = 3.;
00124
00125 float bins[nbins+1];
00126
00127 for (int i = 0; i <= nbins; i++) {
00128
00129 double log = logmin + (logmax-logmin)*i/nbins;
00130 bins[i] = std::pow(10.0, log);
00131
00132 }
00133
00134 dimassRC_ = dbe_->book1D("09_dimassRC", "Dilepton mass RC", 50, 0., 200.);
00135 dimassWC_ = dbe_->book1D("11_dimassWC", "Dilepton mass WC", 50, 0., 200.);
00136 dimassRC_LOGX_ = dbe_->book1D("10_dimassRC_LOGX", "Dilepton mass RC LOG", nbins, &bins[0]);
00137 dimassWC_LOGX_ = dbe_->book1D("12_dimassWC_LOGX", "Dilepton mass WC LOG", nbins, &bins[0]);
00138 dimassRC_LOG10_ = dbe_->book1D("dimassRC_LOG10", "Dilepton mass RC LOG", 50, 0., 2.5);
00139 dimassWC_LOG10_ = dbe_->book1D("dimassWC_LOG10", "Dilepton mass WC LOG", 50, 0., 2.5);
00140
00141 D_eta_muons_ = dbe_->book1D("13_D_eta_muons", "#Delta eta_muons", 20, -5., 5.);
00142 D_phi_muons_ = dbe_->book1D("14_D_phi_muons", "#Delta phi_muons", 20, -5., 5.);
00143 D_eta_elecs_ = dbe_->book1D("D_eta_elecs", "#Delta eta_elecs", 20, -5., 5.);
00144 D_phi_elecs_ = dbe_->book1D("D_phi_elecs", "#Delta phi_elecs", 20, -5., 5.);
00145 D_eta_lepts_ = dbe_->book1D("D_eta_lepts", "#Delta eta_lepts", 20, -5., 5.);
00146 D_phi_lepts_ = dbe_->book1D("D_phi_lepts", "#Delta phi_lepts", 20, -5., 5.);
00147
00148 }
00149
00150
00151 void TopDiLeptonDQM::beginRun(const edm::Run& r, const edm::EventSetup& context) {
00152
00153 }
00154
00155
00156 void TopDiLeptonDQM::analyze(const edm::Event& evt, const edm::EventSetup& context) {
00157
00158
00159
00160
00161
00162 const int N_TriggerPaths = hltPaths_.size();
00163 const int N_SignalPaths = hltPaths_sig_.size();
00164 const int N_ControlPaths = hltPaths_trig_.size();
00165
00166 bool Fired_Signal_Trigger[100] = {false};
00167 bool Fired_Control_Trigger[100] = {false};
00168
00169 int N_run = (evt.id()).run();
00170 int N_event = (evt.id()).event();
00171 int N_lumi = evt.luminosityBlock();
00172
00173 int N_leptons = 0;
00174 int N_iso_mu = 0;
00175 int N_iso_el = 0;
00176 int N_iso_lep = 0;
00177
00178 double DilepMass = 0.;
00179
00180 double vertex_X = 100.;
00181 double vertex_Y = 100.;
00182 double vertex_Z = 100.;
00183
00184
00185
00186
00187
00188 edm::Handle<reco::VertexCollection> vertexs;
00189 evt.getByLabel(vertex_, vertexs);
00190
00191 if( vertexs.failedToGet() ) {
00192
00193
00194
00195
00196
00197 }
00198
00199 if( !vertexs.failedToGet() ) {
00200
00201 reco::Vertex primaryVertex = vertexs->front();
00202
00203 int numberTracks = primaryVertex.tracksSize();
00204
00205 bool fake = primaryVertex.isFake();
00206
00207 Ntracks_->Fill(numberTracks);
00208
00209 if( !fake && numberTracks > 3 ) {
00210
00211 vertex_X = primaryVertex.x();
00212 vertex_Y = primaryVertex.y();
00213 vertex_Z = primaryVertex.z();
00214
00215 }
00216
00217 }
00218
00219
00220
00221
00222
00223 edm::Handle<TriggerResults> trigResults;
00224 evt.getByLabel(triggerResults_, trigResults);
00225
00226 if( trigResults.failedToGet() ) {
00227
00228
00229
00230
00231
00232 }
00233
00234 if( !trigResults.failedToGet() ) {
00235
00236 int N_Triggers = trigResults->size();
00237
00238 const edm::TriggerNames & trigName = evt.triggerNames(*trigResults);
00239
00240 for( int i_Trig = 0; i_Trig < N_Triggers; ++i_Trig ) {
00241
00242 if (trigResults.product()->accept(i_Trig)) {
00243
00244
00245
00246 for( int i = 0; i < N_TriggerPaths; i++ ) {
00247
00248 if ( trigName.triggerName(i_Trig)== hltPaths_[i] ) {
00249
00250 Trigs_->Fill(i);
00251 Trigs_->setBinLabel( i+1, hltPaths_[i], 1);
00252
00253 }
00254
00255 }
00256
00257
00258
00259 for( int j = 0; j < N_SignalPaths; ++j ) {
00260
00261 if( trigName.triggerName(i_Trig) == hltPaths_sig_[j] ) Fired_Signal_Trigger[j] = true;
00262
00263 }
00264
00265 for( int k = 0; k < N_ControlPaths; ++k ) {
00266
00267 if( trigName.triggerName(i_Trig) == hltPaths_trig_[k] ) Fired_Control_Trigger[k] = true;
00268
00269 }
00270
00271 }
00272
00273 }
00274
00275 }
00276
00277
00278
00279
00280
00281 edm::Handle<reco::MuonCollection> muons;
00282 evt.getByLabel(muons_, muons);
00283
00284 reco::MuonCollection::const_iterator muon;
00285
00286 if( muons.failedToGet() ) {
00287
00288
00289
00290
00291
00292 }
00293
00294 if( !muons.failedToGet() ) {
00295
00296 Nmuons_->Fill( muons->size() );
00297
00298 N_leptons = N_leptons + muons->size();
00299
00300 for(muon = muons->begin(); muon!= muons->end(); ++muon) {
00301
00302 float N_muons = muons->size();
00303 float Q_muon = muon->charge();
00304
00305 Nmuons_charge_->Fill(N_muons*Q_muon);
00306
00307 double track_X = 100.;
00308 double track_Y = 100.;
00309 double track_Z = 100.;
00310
00311 if( muon->isGlobalMuon() ) {
00312
00313 reco::TrackRef track = muon->globalTrack();
00314
00315 track_X = track->vx();
00316 track_Y = track->vy();
00317 track_Z = track->vz();
00318
00319 VxVy_muons_->Fill(track_X, track_Y);
00320 Vz_muons_->Fill(track_Z);
00321
00322 }
00323
00324
00325
00326 if( track_X > vertex_X_cut_ ) continue;
00327 if( track_Y > vertex_Y_cut_ ) continue;
00328 if( track_Z > vertex_Z_cut_ ) continue;
00329 if( muon->pt() < muon_pT_cut_ ) continue;
00330 if( abs(muon->eta()) > muon_eta_cut_ ) continue;
00331
00332 reco::MuonIsolation muIso03 = muon->isolationR03();
00333
00334 double muonCombRelIso = 1.;
00335
00336 if ( muon->pt() != 0. )
00337 muonCombRelIso = ( muIso03.emEt + muIso03.hadEt + muIso03.hoEt + muIso03.sumPt ) / muon->pt();
00338
00339 MuIso_CombRelIso03_->Fill( muonCombRelIso );
00340
00341 MuIso_emEt03_->Fill( muIso03.emEt );
00342 MuIso_hadEt03_->Fill( muIso03.hadEt );
00343 MuIso_hoEt03_->Fill( muIso03.hoEt );
00344 MuIso_nJets03_->Fill( muIso03.nJets );
00345 MuIso_nTracks03_->Fill( muIso03.nTracks );
00346 MuIso_sumPt03_->Fill( muIso03.sumPt );
00347
00348 if( muonCombRelIso < muon_iso_cut_ ) ++N_iso_mu;
00349
00350 }
00351
00352 Nmuons_iso_->Fill(N_iso_mu);
00353
00354 }
00355
00356
00357
00358
00359
00360 edm::Handle<reco::GsfElectronCollection> elecs;
00361 evt.getByLabel(elecs_, elecs);
00362
00363 reco::GsfElectronCollection::const_iterator elec;
00364
00365 if( elecs.failedToGet() ) {
00366
00367
00368
00369
00370
00371 }
00372
00373 if( !elecs.failedToGet() ) {
00374
00375 Nelecs_->Fill( elecs->size() );
00376
00377 N_leptons = N_leptons + elecs->size();
00378
00379 for(elec = elecs->begin(); elec!= elecs->end(); ++elec) {
00380
00381 float N_elecs = elecs->size();
00382 float Q_elec = elec->charge();
00383 float HoverE = elec->hcalOverEcal();
00384
00385 HoverE_elecs_->Fill( HoverE );
00386
00387 Nelecs_charge_->Fill(N_elecs*Q_elec);
00388
00389 double track_X = 100.;
00390 double track_Y = 100.;
00391 double track_Z = 100.;
00392
00393 reco::GsfTrackRef track = elec->gsfTrack();
00394
00395 track_X = track->vx();
00396 track_Y = track->vy();
00397 track_Z = track->vz();
00398
00399
00400
00401 if( track_X > vertex_X_cut_ ) continue;
00402 if( track_Y > vertex_Y_cut_ ) continue;
00403 if( track_Z > vertex_Z_cut_ ) continue;
00404 if( elec->pt() < elec_pT_cut_ ) continue;
00405 if( abs(elec->eta()) > elec_eta_cut_ ) continue;
00406 if( HoverE > elec_emf_cut_ ) continue;
00407
00408 reco::GsfElectron::IsolationVariables elecIso = elec->dr03IsolationVariables();
00409
00410 double elecCombRelIso = 1.;
00411
00412 if ( elec->et() != 0. )
00413 elecCombRelIso = ( elecIso.ecalRecHitSumEt + elecIso.hcalDepth1TowerSumEt + elecIso.tkSumPt ) / elec->et();
00414
00415 ElecIso_CombRelIso_->Fill( elecCombRelIso );
00416
00417 ElecIso_cal_->Fill( elecIso.ecalRecHitSumEt );
00418 ElecIso_trk_->Fill( elecIso.tkSumPt );
00419
00420 if( elecCombRelIso < elec_iso_cut_ ) ++N_iso_el;
00421
00422 }
00423
00424 Nelecs_iso_->Fill(N_iso_el);
00425
00426 }
00427
00428 N_iso_lep = N_iso_el + N_iso_mu;
00429
00430
00431
00432
00433
00434
00435 if( N_iso_mu > 1 ) {
00436
00437
00438
00439 if( vertex_X < vertex_X_cut_ && vertex_Y < vertex_Y_cut_ && vertex_Z < vertex_Z_cut_ ) {
00440
00441 ++N_mumu;
00442
00443 Events_->Fill(1.);
00444
00445 reco::MuonCollection::const_reference mu1 = muons->at(0);
00446 reco::MuonCollection::const_reference mu2 = muons->at(1);
00447
00448 DilepMass = sqrt( (mu1.energy()+mu2.energy())*(mu1.energy()+mu2.energy())
00449 - (mu1.px()+mu2.px())*(mu1.px()+mu2.px())
00450 - (mu1.py()+mu2.py())*(mu1.py()+mu2.py())
00451 - (mu1.pz()+mu2.pz())*(mu1.pz()+mu2.pz())
00452 );
00453
00454
00455
00456 if( mu1.charge()*mu2.charge() < 0. ) {
00457
00458 dimassRC_LOG10_->Fill( log10(DilepMass) );
00459 dimassRC_->Fill( DilepMass );
00460 dimassRC_LOGX_->Fill( DilepMass );
00461
00462 if( DilepMass > MassWindow_down_ && DilepMass < MassWindow_up_ ) {
00463
00464 for(muon = muons->begin(); muon!= muons->end(); ++muon) {
00465
00466 pT_muons_->Fill( muon->pt() );
00467 eta_muons_->Fill( muon->eta() );
00468 phi_muons_->Fill( muon->phi() );
00469
00470 }
00471
00472 D_eta_muons_->Fill(mu1.eta()-mu2.eta());
00473 D_phi_muons_->Fill(mu1.phi()-mu2.phi());
00474
00475 if(fileOutput_) {
00476
00477 if( mu1.isGlobalMuon() && mu2.isGlobalMuon() ) {
00478
00479 outfile << "--------------------" << "\n";
00480 outfile << " Run : " << N_run << "\n";
00481 outfile << " Event : " << N_event << "\n";
00482 outfile << "LumiBlock : " << N_lumi << "\n";
00483 outfile << " Type : mu mu" << "\n";
00484 outfile << "--------------------" << "\n";
00485 outfile << "DilepMass : " << DilepMass << "\n";
00486 outfile << "Mu1 Pt : " << mu1.pt() << "\n";
00487 outfile << "Mu1 Eta : " << mu1.eta() << "\n";
00488 outfile << "Mu1 Phi : " << mu1.phi() << "\n";
00489 outfile << "Mu2 Pt : " << mu2.pt() << "\n";
00490 outfile << "Mu2 Eta : " << mu2.eta() << "\n";
00491 outfile << "Mu2 Phi : " << mu2.phi() << "\n";
00492 outfile << "--------------------" << "\n";
00493
00494 }
00495
00496 }
00497
00498
00499
00500 for( int k = 0; k < N_SignalPaths; ++k ) {
00501
00502 if( Fired_Signal_Trigger[k] && Fired_Control_Trigger[k] ) ++N_sig[k];
00503
00504 if( Fired_Control_Trigger[k] ) ++N_trig[k];
00505
00506 if( N_trig[k] != 0 ) Eff[k] = N_sig[k]/static_cast<float>(N_trig[k]);
00507
00508 TriggerEff_->setBinContent( k+1, Eff[k] );
00509 TriggerEff_->setBinLabel( k+1, "#frac{["+hltPaths_sig_[k]+"]}{vs. ["+hltPaths_trig_[k]+"]}", 1);
00510
00511 }
00512
00513 }
00514
00515 }
00516
00517
00518
00519 if( mu1.charge()*mu2.charge() > 0. ) {
00520
00521 dimassWC_LOG10_->Fill( log10(DilepMass) );
00522 dimassWC_->Fill( DilepMass );
00523 dimassWC_LOGX_->Fill( DilepMass );
00524
00525 if(fileOutput_) {
00526
00527 if( mu1.isGlobalMuon() && mu2.isGlobalMuon() ) {
00528
00529 outfile << "---------------------" << "\n";
00530 outfile << " Run : " << N_run << "\n";
00531 outfile << " Event : " << N_event << "\n";
00532 outfile << "LumiBlock : " << N_lumi << "\n";
00533 outfile << " Type : WC mu mu" << "\n";
00534 outfile << "---------------------" << "\n";
00535 outfile << "DilepMass : " << DilepMass << "\n";
00536 outfile << "Mu1 Pt : " << mu1.pt() << "\n";
00537 outfile << "Mu1 Eta : " << mu1.eta() << "\n";
00538 outfile << "Mu1 Phi : " << mu1.phi() << "\n";
00539 outfile << "Mu2 Pt : " << mu2.pt() << "\n";
00540 outfile << "Mu2 Eta : " << mu2.eta() << "\n";
00541 outfile << "Mu2 Phi : " << mu2.phi() << "\n";
00542 outfile << "---------------------" << "\n";
00543
00544 }
00545
00546 }
00547
00548 }
00549
00550 }
00551
00552 }
00553
00554
00555
00556
00557
00558
00559 if( N_iso_el > 0 && N_iso_mu > 0 ) {
00560
00561
00562
00563 if( vertex_X < vertex_X_cut_ && vertex_Y < vertex_Y_cut_ && vertex_Z < vertex_Z_cut_ ) {
00564
00565 ++N_muel;
00566
00567 Events_->Fill(2.);
00568
00569 reco::MuonCollection::const_reference mu1 = muons->at(0);
00570 reco::GsfElectronCollection::const_reference el1 = elecs->at(0);
00571
00572 DilepMass = sqrt( (mu1.energy()+el1.energy())*(mu1.energy()+el1.energy())
00573 - (mu1.px()+el1.px())*(mu1.px()+el1.px())
00574 - (mu1.py()+el1.py())*(mu1.py()+el1.py())
00575 - (mu1.pz()+el1.pz())*(mu1.pz()+el1.pz())
00576 );
00577
00578
00579
00580 if( mu1.charge()*el1.charge() < 0. ) {
00581
00582 dimassRC_LOG10_->Fill( log10(DilepMass) );
00583 dimassRC_->Fill( DilepMass );
00584 dimassRC_LOGX_->Fill( DilepMass );
00585
00586 if( DilepMass > MassWindow_down_ && DilepMass < MassWindow_up_ ) {
00587
00588 for(muon = muons->begin(); muon!= muons->end(); ++muon) {
00589
00590 pT_muons_->Fill( muon->pt() );
00591 eta_muons_->Fill( muon->eta() );
00592 phi_muons_->Fill( muon->phi() );
00593
00594 }
00595
00596 for(elec = elecs->begin(); elec!= elecs->end(); ++elec) {
00597
00598 pT_elecs_->Fill( elec->pt() );
00599 eta_elecs_->Fill( elec->eta() );
00600 phi_elecs_->Fill( elec->phi() );
00601
00602 }
00603
00604 D_eta_lepts_->Fill(mu1.eta()-el1.eta());
00605 D_phi_lepts_->Fill(mu1.phi()-el1.phi());
00606
00607 if(fileOutput_) {
00608
00609 if( mu1.isGlobalMuon() && el1.isElectron() ) {
00610
00611 outfile << "--------------------" << "\n";
00612 outfile << " Run : " << N_run << "\n";
00613 outfile << " Event : " << N_event << "\n";
00614 outfile << "LumiBlock : " << N_lumi << "\n";
00615 outfile << " Type : mu el" << "\n";
00616 outfile << "--------------------" << "\n";
00617 outfile << "DilepMass : " << DilepMass << "\n";
00618 outfile << "Mu1 Pt : " << mu1.pt() << "\n";
00619 outfile << "Mu1 Eta : " << mu1.eta() << "\n";
00620 outfile << "Mu1 Phi : " << mu1.phi() << "\n";
00621 outfile << "El1 Pt : " << el1.pt() << "\n";
00622 outfile << "El1 Eta : " << el1.eta() << "\n";
00623 outfile << "El1 Phi : " << el1.phi() << "\n";
00624 outfile << "--------------------" << "\n";
00625
00626 }
00627
00628 }
00629
00630
00631
00632 for( int k = 0; k < N_SignalPaths; ++k ) {
00633
00634 if( Fired_Signal_Trigger[k] && Fired_Control_Trigger[k] ) ++N_sig[k];
00635
00636 if( Fired_Control_Trigger[k] ) ++N_trig[k];
00637
00638 if( N_trig[k] != 0 ) Eff[k] = N_sig[k]/static_cast<float>(N_trig[k]);
00639
00640 TriggerEff_->setBinContent( k+1, Eff[k] );
00641 TriggerEff_->setBinLabel( k+1, "#frac{["+hltPaths_sig_[k]+"]}{vs. ["+hltPaths_trig_[k]+"]}", 1);
00642
00643 }
00644
00645 }
00646
00647 }
00648
00649
00650
00651 if( mu1.charge()*el1.charge() > 0. ) {
00652
00653 dimassWC_LOG10_->Fill( log10(DilepMass) );
00654 dimassWC_->Fill( DilepMass );
00655 dimassWC_LOGX_->Fill( DilepMass );
00656
00657 }
00658
00659 }
00660
00661 }
00662
00663
00664
00665
00666
00667
00668 if( N_iso_el > 1 ) {
00669
00670
00671
00672 if( vertex_X < vertex_X_cut_ && vertex_Y < vertex_Y_cut_ && vertex_Z < vertex_Z_cut_ ) {
00673
00674 ++N_elel;
00675
00676 Events_->Fill(3.);
00677
00678 reco::GsfElectronCollection::const_reference el1 = elecs->at(0);
00679 reco::GsfElectronCollection::const_reference el2 = elecs->at(1);
00680
00681 DilepMass = sqrt( (el1.energy()+el2.energy())*(el1.energy()+el2.energy())
00682 - (el1.px()+el2.px())*(el1.px()+el2.px())
00683 - (el1.py()+el2.py())*(el1.py()+el2.py())
00684 - (el1.pz()+el2.pz())*(el1.pz()+el2.pz())
00685 );
00686
00687
00688
00689 if( el1.charge()*el2.charge() < 0. ) {
00690
00691 dimassRC_LOG10_->Fill( log10(DilepMass) );
00692 dimassRC_->Fill( DilepMass );
00693 dimassRC_LOGX_->Fill( DilepMass );
00694
00695 if( DilepMass > MassWindow_down_ && DilepMass < MassWindow_up_ ) {
00696
00697 for(elec = elecs->begin(); elec!= elecs->end(); ++elec) {
00698
00699 pT_elecs_->Fill( elec->pt() );
00700 eta_elecs_->Fill( elec->eta() );
00701 phi_elecs_->Fill( elec->phi() );
00702
00703 }
00704
00705 D_eta_elecs_->Fill(el1.eta()-el2.eta());
00706 D_phi_elecs_->Fill(el1.phi()-el2.phi());
00707
00708 if(fileOutput_) {
00709
00710 if( el1.isElectron() && el2.isElectron() ) {
00711
00712 outfile << "--------------------" << "\n";
00713 outfile << " Run : " << N_run << "\n";
00714 outfile << " Event : " << N_event << "\n";
00715 outfile << "LumiBlock : " << N_lumi << "\n";
00716 outfile << " Type : el el" << "\n";
00717 outfile << "--------------------" << "\n";
00718 outfile << "DilepMass : " << DilepMass << "\n";
00719 outfile << "El1 Pt : " << el1.pt() << "\n";
00720 outfile << "El1 Eta : " << el1.eta() << "\n";
00721 outfile << "El1 Phi : " << el1.phi() << "\n";
00722 outfile << "El2 Pt : " << el2.pt() << "\n";
00723 outfile << "El2 Eta : " << el2.eta() << "\n";
00724 outfile << "El2 Phi : " << el2.phi() << "\n";
00725 outfile << "--------------------" << "\n";
00726
00727 }
00728
00729 }
00730
00731
00732
00733 for( int k = 0; k < N_SignalPaths; ++k ) {
00734
00735 if( Fired_Signal_Trigger[k] && Fired_Control_Trigger[k] ) ++N_sig[k];
00736
00737 if( Fired_Control_Trigger[k] ) ++N_trig[k];
00738
00739 if( N_trig[k] != 0 ) Eff[k] = N_sig[k]/static_cast<float>(N_trig[k]);
00740
00741 TriggerEff_->setBinContent( k+1, Eff[k] );
00742 TriggerEff_->setBinLabel( k+1, "#frac{["+hltPaths_sig_[k]+"]}{vs. ["+hltPaths_trig_[k]+"]}", 1);
00743
00744 }
00745
00746 }
00747
00748 }
00749
00750
00751
00752 if( el1.charge()*el2.charge() > 0. ) {
00753
00754 dimassWC_LOG10_->Fill( log10(DilepMass) );
00755 dimassWC_->Fill( DilepMass );
00756 dimassWC_LOGX_->Fill( DilepMass );
00757
00758 }
00759
00760 }
00761
00762 }
00763
00764 }
00765
00766
00767 void TopDiLeptonDQM::endRun(const edm::Run& r, const edm::EventSetup& context) {
00768
00769 }
00770
00771 void TopDiLeptonDQM::endJob() {
00772
00773 if(fileOutput_) outfile.close();
00774
00775 }