ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/LJMet/MultivariateAnalysis/src/TtLJetsAnalyzer.cc
Revision: 1.29
Committed: Mon Jan 4 06:16:00 2010 UTC (15 years, 4 months ago) by kukartse
Content type: text/plain
Branch: MAIN
CVS Tags: gak010310
Changes since 1.28: +3 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 kukartse 1.1 // -*- C++ -*-
2 msegala 1.23 //asdasdasd
3 kukartse 1.1 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
4     #include "DataFormats/PatCandidates/interface/Jet.h"
5     #include "DataFormats/PatCandidates/interface/Electron.h"
6     #include "DataFormats/PatCandidates/interface/Muon.h"
7     #include "DataFormats/PatCandidates/interface/MET.h"
8     #include "LJMet/MultivariateAnalysis/interface/TtLJetsAnalyzer.h"
9     #include "LJMet/MultivariateAnalysis/interface/TopTopologicalVariables.h"
10     #include "LJMet/MultivariateAnalysis/interface/LJetsTopoVars.h"
11 kukartse 1.16 #include "FWCore/Framework/interface/TriggerNames.h"
12     #include "DataFormats/Common/interface/TriggerResults.h"
13 kukartse 1.24 #include "DataFormats/MuonReco/interface/MuonSelectors.h"
14     #include "DataFormats/PatCandidates/interface/TriggerPath.h"
15     #include "FWCore/ServiceRegistry/interface/Service.h"
16     #include "PhysicsTools/UtilAlgos/interface/TFileService.h"
17 kukartse 1.1
18     using namespace std;
19     using namespace top_cafe;
20    
21     TtLJetsAnalyzer::TtLJetsAnalyzer(const edm::ParameterSet& iConfig)
22     {
23 kukartse 1.16 first_event = true;
24 kukartse 1.24
25     // init TFileService, needed for the output root file
26     edm::Service<TFileService> fs;
27     _tree = fs->make<TTree>("ttljets", "ttljets", 64000000);
28    
29 kukartse 1.8 //
30     // _____ some default values __________________________________________
31 kukartse 1.13 //
32 kukartse 1.8 nCaloJets_min = 2;
33     nLepton_min = 1;
34 jindal 1.9 jet_pt_min = 25.0;
35 kukartse 1.8 jet_eta_max = 2.4;
36     muon_pt_min = 20.0;
37     muon_eta_max = 2.1;
38     muon_trackIso_max = 100.0;
39     muon_caloIso_max = 100.0;
40     electron_pt_min = 20.0;
41     electron_eta_max = 2.1;
42     electron_trackIso_max = 100.0;
43     electron_caloIso_max = 100.0;
44     met_et_min = 0.0;
45 kukartse 1.10 min_dr_jet_lepton = 0.0;
46 kukartse 1.11 _is_mc = true;
47 kukartse 1.13 _beamSpotSource = "offlineBeamSpot";
48 kukartse 1.16 _trigger_source = "TriggerResults";
49 kukartse 1.13 _lepton_flavor_is_muon= true;
50 kukartse 1.17 _track_source = "generalTracks";
51 kukartse 1.20 pdfWeightTag_ = "notag";
52 kukartse 1.17 _bfield = 3.8;
53     _dist_min = -0.04;
54     _dist_max = 0.04;
55     _abs_dcot_max = 0.03;
56     _e_track_dr = 0.3;
57     _is_conv = false;
58 kukartse 1.13 //
59     //_____ config file parameters ________________________________________
60     //
61 kukartse 1.6 _outFile = iConfig.getParameter<string>("outFile");
62     _jetSource = iConfig.getParameter<string>("jetSource");
63     _electronSource = iConfig.getParameter<string>("electronSource");
64     _muonSource = iConfig.getParameter<string>("muonSource");
65     _METSource = iConfig.getParameter<string>("METSource");
66     //
67 kukartse 1.13 //_____ Optional cuts (better use the official PAT selection filters)__
68 kukartse 1.6 //
69 kukartse 1.10 if (iConfig.exists("nCaloJets_min")) nCaloJets_min = iConfig.getParameter<int>("nCaloJets_min");
70     if (iConfig.exists("nLepton_min")) nLepton_min = iConfig.getParameter<int>("nLepton_min");
71     if (iConfig.exists("jet_pt_min")) jet_pt_min = iConfig.getParameter<double>("jet_pt_min");
72     if (iConfig.exists("jet_eta_max")) jet_eta_max = iConfig.getParameter<double>("jet_eta_max");
73     if (iConfig.exists("muon_pt_min")) muon_pt_min = iConfig.getParameter<double>("muon_pt_min");
74     if (iConfig.exists("muon_eta_max")) muon_eta_max = iConfig.getParameter<double>("muon_eta_max");
75     if (iConfig.exists("muon_trackIso_max")) muon_trackIso_max = iConfig.getParameter<double>("muon_trackIso_max");
76     if (iConfig.exists("muon_caloIso_max")) muon_caloIso_max = iConfig.getParameter<double>("muon_caloIso_max");
77     if (iConfig.exists("electron_pt_min")) electron_pt_min = iConfig.getParameter<double>("electron_pt_min");
78     if (iConfig.exists("electron_eta_max")) electron_eta_max = iConfig.getParameter<double>("electron_eta_max");
79 kukartse 1.7 if (iConfig.exists("electron_trackIso_max")) electron_trackIso_max = iConfig.getParameter<double>("electron_trackIso_max");
80 kukartse 1.10 if (iConfig.exists("electron_caloIso_max")) electron_caloIso_max = iConfig.getParameter<double>("electron_caloIso_max");
81     if (iConfig.exists("met_et_min")) met_et_min = iConfig.getParameter<double>("met_et_min");
82 kukartse 1.11 if (iConfig.exists("min_dr_jet_lepton")) min_dr_jet_lepton = iConfig.getParameter<double>("min_dr_jet_lepton");
83     if (iConfig.exists("is_mc")) _is_mc = iConfig.getParameter<bool>("is_mc");
84 kukartse 1.13 if (iConfig.exists("beam_spot")) _beamSpotSource = iConfig.getParameter<string>("beam_spot");
85 kukartse 1.16 if (iConfig.exists("triggerSource")) _trigger_source = iConfig.getParameter<string>("triggerSource");
86 kukartse 1.13 if (iConfig.exists("lepton_flavor_is_muon")) _lepton_flavor_is_muon= iConfig.getParameter<bool>("lepton_flavor_is_muon");
87 kukartse 1.17 if (iConfig.exists("track_source")) _track_source = iConfig.getParameter<string>("track_source");
88     if (iConfig.exists("b_field")) _bfield = iConfig.getParameter<double>("b_field");
89     if (iConfig.exists("e_dist_min")) _dist_min = iConfig.getParameter<double>("e_dist_min");
90     if (iConfig.exists("e_dist_max")) _dist_max = iConfig.getParameter<double>("e_dist_max");
91     if (iConfig.exists("abs_dcot_max")) _abs_dcot_max = iConfig.getParameter<double>("abs_dcot_max");
92     if (iConfig.exists("e_track_dr")) _e_track_dr = iConfig.getParameter<double>("e_track_dr");
93 kukartse 1.20 if (iConfig.exists("pdfWeightTag")) pdfWeightTag_ = iConfig.getParameter<string>("pdfWeightTag");
94 kukartse 1.1 }
95    
96    
97     TtLJetsAnalyzer::~TtLJetsAnalyzer()
98     {
99    
100     }
101    
102    
103     void TtLJetsAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
104     {
105     using namespace edm;
106     using namespace reco;
107     using namespace std;
108 kukartse 1.13 //
109     //_____ Get objects from the event ____________________________________
110     //
111     Handle< vector< pat::Jet > > jets;
112 kukartse 1.1 Handle< vector< pat::Electron > > electrons;
113 kukartse 1.13 Handle< vector< pat::Muon > > muons;
114     Handle< vector< pat::MET > > METs;
115     Handle< reco::BeamSpot > beamSpotHandle;
116 kukartse 1.24
117     // trigger
118     //Handle<TriggerResults> hltresults;
119     //iEvent.getByLabel(_trigger_source, hltresults);
120     Handle<std::vector<pat::TriggerPath> > hltresults;
121     iEvent.getByLabel("patTrigger", hltresults);
122    
123 kukartse 1.17 Handle<edm::View<reco::Track> > tracks;
124 kukartse 1.1 iEvent . getByLabel( _jetSource, jets );
125     iEvent . getByLabel( _electronSource, electrons );
126     iEvent . getByLabel( _muonSource, muons );
127     iEvent . getByLabel( _METSource, METs );
128 kukartse 1.13 iEvent . getByLabel( _beamSpotSource, beamSpotHandle);
129 kukartse 1.17 iEvent.getByLabel(_track_source, tracks);
130 kukartse 1.26
131 kukartse 1.16 //
132 kukartse 1.20 //_____ PDF weights ___________________________________________________
133     //
134 kukartse 1.22 /*
135 kukartse 1.21 _pdf_weights->clear();
136 kukartse 1.20 _weight_pdf_pos = 1.0;
137     _weight_pdf_neg = 1.0;
138     edm::Handle<std::vector<double> > weightHandle;
139     unsigned int nmembers;
140     if (pdfWeightTag_.find("notag")==std::string::npos){
141     iEvent.getByLabel(pdfWeightTag_, weightHandle);
142 kukartse 1.21 std::vector<double> _ws = *weightHandle;
143 kukartse 1.20 // DEBUG:
144 kukartse 1.21 //std::vector<double> * d_ws = new std::vector<double>();
145     //d_ws->push_back(1.0);
146     //d_ws->push_back(1.1);
147     //d_ws->push_back(0.9);
148     //std::vector<double> & _ws = *d_ws;
149     //
150     cout << "DEBUG weights" << endl;
151     for (std::vector<double>::const_iterator _wt=_ws.begin(); _wt!=_ws.end(); _wt++){
152     cout << "DEBUG weights loop" << endl;
153     _pdf_weights->push_back(*_wt);
154     }
155     // DEBUG
156     //delete d_ws;
157 kukartse 1.20 nmembers = _pdf_weights->size();
158     // compute positive and negative weight uncertainty
159     double _d_w_pos=0.0;
160     double _d_w_neg=0.0;
161     for (int i=0; i!=(nmembers-1)/2; i++){
162     //double _dmax = 0.0;
163     double _dpos = (*_pdf_weights)[2*i+1] - (*_pdf_weights)[0];
164     double _dneg = (*_pdf_weights)[2*i+2] - (*_pdf_weights)[0];
165     if (_dpos>_dneg){
166     if (_dpos>0.0) _d_w_pos+=_dpos*_dpos;
167     if (_dneg<0.0) _d_w_neg+=_dneg*_dneg;
168     }
169     else{
170     if (_dneg>0.0) _d_w_pos+=_dneg*_dneg;
171     if (_dpos<0.0) _d_w_neg+=_dpos*_dpos;
172     }
173     }
174     _weight_pdf_pos = 1.0+sqrt(_d_w_pos);
175     _weight_pdf_neg = 1.0-sqrt(_d_w_neg);
176     //cout << "***** DEBUG PDF WEIGHTS ***** " << _weight_pdf_pos << " *** " << _weight_pdf_neg << endl;
177     }
178 kukartse 1.22 */
179 kukartse 1.20 //
180 kukartse 1.16 //_____ Trigger _______________________________________________________
181     //
182 kukartse 1.24 //int ntrigs=hltresults->size();
183     //edm::TriggerNames triggerNames_;
184     //triggerNames_.init(*hltresults);
185     //for (int itrig = 0; itrig < ntrigs; ++itrig) {
186     // _hlt[triggerNames_.triggerName(itrig)]=hltresults->accept(itrig);
187     // //DEBUG:
188     // cout << "Trigger name and number: " << triggerNames_.triggerName(itrig) << ", " << itrig << endl;
189     //}
190     for (std::vector<pat::TriggerPath>::const_iterator trig = hltresults->begin();
191     trig!=hltresults->end();
192     ++trig){
193     _hlt[trig->name()]=trig->wasAccept();
194 kukartse 1.16 }
195 kukartse 1.24
196 kukartse 1.16 //
197     //_____ Execute on first entry only____________________________________
198     //
199     if (first_event){
200     for (std::map<std::string,bool>::const_iterator trigger=_hlt.begin(); trigger!=_hlt.end(); trigger++){
201     std::string _tName = trigger->first;
202     std::string _tNameType = _tName;
203     _tNameType.append("/O");
204     cout << _tNameType << endl;
205     _tree -> Branch(_tName.c_str(), (bool *)(&(trigger->second)), _tNameType.c_str());
206     }
207     first_event=false;
208     }
209 kukartse 1.13 //
210     //_____ Beam spot _____________________________________________________
211 kukartse 1.16 //
212 kukartse 1.13 reco::BeamSpot beamSpot;
213     if ( beamSpotHandle.isValid() ){
214     beamSpot = *beamSpotHandle;
215     }
216     else{
217     edm::LogInfo("TtLJetsAnalyzer")
218     << "No beam spot available from EventSetup \n";
219     }
220     const reco::BeamSpot::Point _bs(beamSpot.x0(), beamSpot.y0(),beamSpot.z0());
221     //
222     //_____ event weight __________________________________________________
223     //
224 kukartse 1.2 double weight = 1.0;
225 kukartse 1.13 //
226     //_____ Event counters ________________________________________________
227     //
228 kukartse 1.1 eventCounter . count();
229     eventCounter . incrementDouble( weight );
230 kukartse 1.13 //
231 kukartse 1.1 //__________ Initialization of ntuple variables_______________________
232 kukartse 1.13 //
233 kukartse 1.26 _event = -1;
234     irun = -1;
235     ilumi = -1;
236 kukartse 1.7 _lepton_et = -1.0;
237 kukartse 1.1 _lepton_pt = -1.0;
238 kukartse 1.28 _lepton_eta = -10.0;
239 kukartse 1.1 _lepton_phi = -1.0;
240     _lepton_energy = -1.0;
241 kukartse 1.4 _muon_track_chi2 = -10.0;
242     _muon_track_ndof = -10.0;
243     _muon_track_nChi2 = -10.0;
244     _muon_outerTrack_chi2 = -10.0;
245     _muon_outerTrack_ndof = -10.0;
246     _muon_outerTrack_nChi2 = -10.0;
247     _muon_globalTrack_chi2 = -10.0;
248     _muon_globalTrack_ndof = -10.0;
249     _muon_globalTrack_nChi2 = -10.0;
250 kukartse 1.1 _lepton_track_iso = -1.0;
251     _lepton_calo_iso = -1.0;
252 kukartse 1.3 _lepton_ecal_iso = -1.0;
253     _lepton_hcal_iso = -1.0;
254     _lepton_user_iso = -1.0;
255 kukartse 1.11 _lepton_IsoDeposit_em = -1.0;
256     _lepton_IsoDeposit_had = -1.0;
257 kukartse 1.14 _lepton_jet_min_dr = 1000000.0;
258     _lepton_ptrel = 0.0; // relative to the nearest jet
259     _lepton_d0 = 0.0; // relative to the beam spot
260     _lepton_d0_err = -1.0; // relative to the beam spot
261     _lepton_d0_significance = -1.0; // relative to the beam spot
262 kukartse 1.7 _eidLoose = -10.0;
263     _eidRobustHighEnergy = -10.0;
264     _eidRobustLoose = -10.0;
265     _eidRobustTight = -10.0;
266     _eidTight = -10.0;
267     _GsfElectron_classification = -100;
268     _GsfElectron_hadronicOverEm = -100.0;
269     _GsfElectron_caloEnergyError = -100.0;
270     _GsfElectron_trackMomentumError = -100.0;
271     _GsfElectron_numberOfClusters = -100;
272     _GsfElectron_caloEnergy = -100.0;
273     _GsfElectron_eSuperClusterOverP = -100.0;
274     _GsfElectron_eSeedClusterOverPout = -100.0;
275     _GsfElectron_deltaEtaSuperClusterTrackAtVtx = -100.0;
276     _GsfElectron_deltaEtaSeedClusterTrackAtCalo = -100.0;
277     _GsfElectron_deltaPhiSuperClusterTrackAtVtx = -100.0;
278     _GsfElectron_deltaPhiSeedClusterTrackAtCalo = -100.0;
279     _met_et = -1.0;
280 kukartse 1.1 _met_pt = -1.0;
281     _met_eta = -1.0;
282     _met_phi = -1.0;
283     _met_energy = -1.0;
284 kukartse 1.7 _jet1_et = -1.0;
285 kukartse 1.1 _jet1_pt = -1.0;
286     _jet1_eta = -1.0;
287     _jet1_phi = -1.0;
288     _jet1_energy = -1.0;
289 kukartse 1.7 _jet2_et = -1.0;
290 kukartse 1.1 _jet2_pt = -1.0;
291     _jet2_eta = -1.0;
292     _jet2_phi = -1.0;
293     _jet2_energy = -1.0;
294 kukartse 1.7 _jet3_et = -1.0;
295 kukartse 1.1 _jet3_pt = -1.0;
296     _jet3_eta = -1.0;
297     _jet3_phi = -1.0;
298     _jet3_energy = -1.0;
299 kukartse 1.7 _jet4_et = -1.0;
300 kukartse 1.1 _jet4_pt = -1.0;
301     _jet4_eta = -1.0;
302     _jet4_phi = -1.0;
303     _jet4_energy = -1.0;
304 kukartse 1.7 //
305 kukartse 1.14 // _____ b tagging initialization: vectors, flavor etc ______________________________
306 kukartse 1.7 //
307 kukartse 1.13 /* do we need vectors?
308     */
309 kukartse 1.17 _e_dist->clear();
310     _e_dcot->clear();
311     //
312 kukartse 1.20 //
313 kukartse 1.11 _jet_pt->clear();
314     _jet_pz->clear();
315     _jet_eta->clear();
316     _jet_phi->clear();
317     _jet_et->clear();
318     _jet_energy->clear();
319     _jet_flavor->clear();
320 kukartse 1.12 //
321     _muon_pt->clear();
322     _muon_pz->clear();
323     _muon_eta->clear();
324     _muon_phi->clear();
325     _muon_et->clear();
326     _muon_energy->clear();
327     _muon_flavor->clear();
328     //
329     _electron_pt->clear();
330     _electron_pz->clear();
331     _electron_eta->clear();
332     _electron_phi->clear();
333     _electron_et->clear();
334     _electron_energy->clear();
335     _electron_flavor->clear();
336     //
337 kukartse 1.7 _b_tagger_label->clear();
338     _b_tagger_discr->clear();
339 kukartse 1.13 //
340 kukartse 1.21 //_pdf_weights->clear();
341 kukartse 1.20 //
342 kukartse 1.1 _n_tagged_jets_trackCounting_loose = -10;
343     _n_tagged_jets_trackCounting_medium = -10;
344     _n_tagged_jets_trackCounting_tight = -10;
345     _n_tagged_jets_jetProb_loose = -10;
346     _n_tagged_jets_jetProb_medium = -10;
347     _n_tagged_jets_jetProb_tight = -10;
348 kukartse 1.14 //
349     //_____ loop over electrons ___________________________________________
350     //
351     vector<int> good_electron_key;
352     RooGKCounter nOfGoodElectrons( "" );
353     int el_ind = 0;
354     for ( vector<pat::Electron>::const_iterator el = electrons -> begin(); el != electrons -> end(); el++){
355     if (
356     el->pt() > electron_pt_min &&
357     fabs( el->eta() ) < electron_eta_max &&
358     el->trackIso() < electron_trackIso_max &&
359     el->caloIso() < electron_caloIso_max
360     ){
361     _electron_pt->push_back(el->pt());
362     _electron_pz->push_back(el->pz());
363     _electron_eta->push_back(el->eta());
364     _electron_phi->push_back(el->phi());
365     _electron_et->push_back(el->et());
366     _electron_energy->push_back(el->energy());
367     //if ( _is_mc ){
368     //_electron_flavor->push_back(el->genLepton()->pdgId());
369     //}
370     good_electron_key . push_back( el_ind );
371     nOfGoodElectrons . count();
372     }
373     el_ind++;
374     }
375     //
376     //_____ loop over muons _______________________________________________
377     //
378     vector<int> good_muon_key;
379     RooGKCounter nOfGoodMuons( "" );
380     int mu_ind = 0;
381     for ( vector<pat::Muon>::const_iterator mu = muons -> begin(); mu != muons -> end(); mu++){
382     if (
383     mu->pt() > muon_pt_min &&
384     fabs( mu->eta() ) < muon_eta_max &&
385     mu->trackIso() < muon_trackIso_max &&
386     mu->caloIso() < muon_caloIso_max
387     ){
388     _muon_pt->push_back(mu->pt());
389     _muon_pz->push_back(mu->pz());
390     _muon_eta->push_back(mu->eta());
391     _muon_phi->push_back(mu->phi());
392     _muon_et->push_back(mu->et());
393     _muon_energy->push_back(mu->energy());
394     //_muon_ip->
395     //if ( _is_mc ){
396     //_muon_flavor->push_back(mu->genLepton()->pdgId());
397     //}
398     good_muon_key . push_back( mu_ind );
399     nOfGoodMuons . count();
400     }
401     mu_ind++;
402     }
403     //
404     //_____ pointer to the lepton _________________________________________
405     //
406     const reco::RecoCandidate * the_lepton=0;
407 kukartse 1.24 const pat::Muon * the_muon=0;
408     const reco::RecoCandidate * the_electron=0;
409 kukartse 1.14 if ( !_lepton_flavor_is_muon && (int)nOfGoodElectrons.getCount()>0 ){
410     the_lepton = &((*electrons)[good_electron_key[0]]);
411 kukartse 1.24 the_electron = &((*electrons)[good_electron_key[0]]);
412 kukartse 1.14 }
413     else if ( _lepton_flavor_is_muon && (int)nOfGoodMuons.getCount()>0 ){
414     the_lepton = &((*muons)[good_muon_key[0]]);
415 kukartse 1.24 the_muon = &((*muons)[good_muon_key[0]]);
416 kukartse 1.14 }
417     else{
418     LogInfo("TtLJetsAnalyzer") << "No lepton selected in the event! Pointer is null..." << endl;
419     }
420     TVector3 the_lepton_p3;
421     if (the_lepton){
422     the_lepton_p3.SetX(the_lepton->px());
423     the_lepton_p3.SetY(the_lepton->py());
424     the_lepton_p3.SetZ(the_lepton->pz());
425     }
426 kukartse 1.13 //
427 kukartse 1.19 //_____ JES shift debugging
428     //
429     /*
430     //
431     Handle< vector< pat::Jet > > jets_shifted;
432     iEvent . getByLabel( "jesShiftProducer", jets_shifted );
433     for ( vector<pat::Jet>::const_iterator jet = jets -> begin(); jet != jets -> end(); jet++ ){
434     //edm::LogInfo("TtLJetsAnalyzer: ") << "unshifted jet energy = " << jet->energy() << std::endl;
435     std::cerr << "unshifted jet pT = " << jet->pt() << std::endl;
436     }
437     for ( vector<pat::Jet>::const_iterator jet = jets_shifted -> begin(); jet != jets_shifted -> end(); jet++ ){
438     //edm::LogInfo("TtLJetsAnalyzer: ") << "shifted jet energy = " << jet->energy() << std::endl;
439     std::cerr << "shifted jet pT = " << jet->pt() << std::endl;
440     }
441     */
442     //
443 kukartse 1.13 //_____ loop over jets ________________________________________________
444     //
445     vector<int> good_jet_key;
446 kukartse 1.1 RooGKCounter nOfGoodJets;
447     RooGKCounter n_trackCounting_loose;
448     RooGKCounter n_trackCounting_medium;
449     RooGKCounter n_trackCounting_tight;
450     RooGKCounter n_jetProb_loose;
451     RooGKCounter n_jetProb_medium;
452     RooGKCounter n_jetProb_tight;
453     int jet_ind=0;
454     for ( vector<pat::Jet>::const_iterator jet = jets -> begin(); jet != jets -> end(); jet++ ){
455     if (
456     ( fabs( (*jet) . eta() ) < jet_eta_max ) &&
457 kukartse 1.10 ( (*jet) . pt() > jet_pt_min )
458 kukartse 1.1 )
459     {
460 kukartse 1.11 _jet_pt->push_back(jet->pt());
461     _jet_pz->push_back(jet->pz());
462     _jet_eta->push_back(jet->eta());
463     _jet_phi->push_back(jet->phi());
464     _jet_et->push_back(jet->et());
465     _jet_energy->push_back(jet->energy());
466 kukartse 1.14 //
467     //_____ min delta R with the lepton _____________________________
468     //
469     if (the_lepton){
470     TVector3 _jetp3(jet->px(),jet->py(),jet->pz());
471     double _dr = the_lepton_p3.DeltaR(_jetp3);
472     if (_dr<_lepton_jet_min_dr){
473     _lepton_jet_min_dr = _dr;
474     _lepton_ptrel = the_lepton_p3.Perp(_jetp3);
475     }
476     }
477     //
478     //_____ jet flavor (MC only!!!) _________________________________
479     //
480 kukartse 1.11 //if ( _is_mc ){
481     //int jet_flavor = jet -> partonFlavour();
482     // cout << "### DEBUG! jet parton flavor ID is " << jetFlavor << endl;
483     //_jet_flavor->push_back(jet_flavor);
484     //}
485 kukartse 1.1 good_jet_key . push_back( jet_ind );
486     nOfGoodJets . count();
487 kukartse 1.7 double jetBDiscr_track_count_high_eff = jet -> bDiscriminator( "trackCountingHighEffBJetTags" );
488     double jetBDiscr_track_count_high_pur = jet -> bDiscriminator( "trackCountingHighPurBJetTags" );
489     double jetBDiscr_jet_prob = jet -> bDiscriminator( "jetProbabilityBJetTags" );
490 kukartse 1.1 if (jetBDiscr_track_count_high_eff > 2.0) n_trackCounting_loose.count();
491     if (jetBDiscr_track_count_high_eff > 4.6) n_trackCounting_medium.count();
492     if (jetBDiscr_track_count_high_pur > 4.7) n_trackCounting_tight.count();
493     if (jetBDiscr_jet_prob > 0.26) n_jetProb_loose.count();
494     if (jetBDiscr_jet_prob > 0.50) n_jetProb_medium.count();
495     if (jetBDiscr_jet_prob > 0.76) n_jetProb_tight.count();
496 kukartse 1.7
497     //
498 kukartse 1.13 //_____ dump all tagger labels and discriminator values _________
499     //
500 kukartse 1.7 const std::vector<std::pair<std::string, float> > & _discri = jet->getPairDiscri();
501     _b_tagger_label->clear();
502     _b_tagger_discr->clear();
503     for (std::vector<std::pair<std::string, float> >::const_iterator _di=_discri.begin(); _di!=_discri.end(); _di++){
504     //cout << " ==> Found available tagger: " << _di->first << ", discr=" << _di->second << endl;
505     _b_tagger_label->push_back(_di->first);
506     _b_tagger_discr->push_back(_di->second);
507     }
508 kukartse 1.1 if (nOfGoodJets.getCount()==1){
509 kukartse 1.7 _jet1_et=jet->et();
510 kukartse 1.1 _jet1_pt=jet->pt();
511     _jet1_eta=jet->eta();
512     _jet1_phi=jet->phi();
513     _jet1_energy=jet->energy();
514     }
515     if (nOfGoodJets.getCount()==2){
516 kukartse 1.7 _jet2_et=jet->et();
517 kukartse 1.1 _jet2_pt=jet->pt();
518     _jet2_eta=jet->eta();
519     _jet2_phi=jet->phi();
520     _jet2_energy=jet->energy();
521     }
522     if (nOfGoodJets.getCount()==3){
523 kukartse 1.7 _jet3_et=jet->et();
524 kukartse 1.1 _jet3_pt=jet->pt();
525     _jet3_eta=jet->eta();
526     _jet3_phi=jet->phi();
527     _jet3_energy=jet->energy();
528     }
529     if (nOfGoodJets.getCount()==4){
530 kukartse 1.7 _jet4_et=jet->et();
531 kukartse 1.1 _jet4_pt=jet->pt();
532     _jet4_eta=jet->eta();
533     _jet4_phi=jet->phi();
534     _jet4_energy=jet->energy();
535     }
536     }
537     jet_ind++;
538     }
539 kukartse 1.13 //
540     //_____ loop over the MET collection __________________________________
541     //
542 kukartse 1.1 RooGKCounter nOfGoodMETs( "" );
543     for ( vector<pat::MET>::const_iterator met = METs -> begin(); met != METs -> end(); met++){
544     if (
545 kukartse 1.13 met->et() > met_et_min
546 kukartse 1.1 )
547     {
548     nOfGoodMETs . count();
549     }
550     }
551 kukartse 1.13 //
552     //_____ EVENT SELECTION _____________________________________________________
553     //
554 kukartse 1.29 /*
555 kukartse 1.28 cout << "******************* DEBUG!!!!!!!!! Event Selection: jets, muons, electrons, is_muon"
556     << nOfGoodJets.getCount() << ", "
557     << nOfGoodMuons.getCount() << ", "
558     << nOfGoodElectrons.getCount() << ", "
559     << _lepton_flavor_is_muon << endl;
560 kukartse 1.29 */
561 kukartse 1.1 if (
562     (int)nOfGoodJets . getCount() >= nCaloJets_min &&
563 kukartse 1.13 ( (!_lepton_flavor_is_muon && (int)nOfGoodElectrons . getCount() >= nLepton_min) ||
564     (_lepton_flavor_is_muon && (int)nOfGoodMuons . getCount() >= nLepton_min) ) &&
565 kukartse 1.1 nOfGoodMETs . getCount() > 0 ){
566 kukartse 1.29 //cout << "******************* DEBUG 1 !!!!!!!!! " << endl;
567 kukartse 1.1 selectedEvents . count();
568     selectedEvents . incrementDouble( weight );
569 kukartse 1.13 //
570     //_____ fill tree variables _________________________________________
571     //
572 kukartse 1.26 //_event = eventCounter . getCount();
573     //
574     //_____ event book keeping
575     //
576     irun = (unsigned int)iEvent.id().run();
577     // this will work starting with CMSSW_340:
578     //unsigned int ilumi = (unsigned int)iEvent.id().luminosityBlock();
579     ilumi = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock();
580     _event = (Int_t)iEvent.id().event();
581 kukartse 1.2 _process_id = 0;
582 kukartse 1.13 _event_weight = weight;
583 kukartse 1.1 _n_jets = nOfGoodJets.getCount();
584     _n_met = nOfGoodMETs.getCount();
585     _n_muons = nOfGoodMuons.getCount();
586     _n_electrons = nOfGoodElectrons.getCount();
587 kukartse 1.24
588 kukartse 1.14 //
589     // _____ other lepton quantities __________________________________________
590 kukartse 1.13 //
591 kukartse 1.1 string lepton_source;
592 kukartse 1.13 bool is_muon = _lepton_flavor_is_muon;
593 kukartse 1.26 if(is_muon && _n_muons>0){
594     //
595     //_____ lepton impact parameter __________________________________________
596     //
597     //_lepton_d0 = -(_lepton_track->dxy(_bs));
598     _lepton_d0 = the_muon->dB();
599     //edm::LogInfo("TtLJetsAnalyzer") << "muon IP is " << _lepton_d0 << endl;
600 kukartse 1.24 reco::TrackRef muTrack = the_muon->track();
601     if ( muTrack.isNonnull() && muTrack.isAvailable() ) {
602     _lepton_d0_err = sqrt( muTrack->d0Error()*muTrack->d0Error()
603     + beamSpot.BeamWidthX()*beamSpot.BeamWidthX()
604     + beamSpot.BeamWidthY()*beamSpot.BeamWidthY());
605 kukartse 1.28 _muon_track_nhits = the_muon->numberOfValidHits();
606     //_muon_track_chi2 = the_muon->track()->chi2();
607     //_muon_track_ndof = the_muon->track()->ndof();
608     _muon_track_nChi2 = the_muon->normChi2();
609     //
610     //_____ muon standard selectors ___________________________________
611     //
612     _muon_isGood_All = muon::isGoodMuon(*the_muon, muon::All);
613     _muon_isGood_AllGlobalMuons = muon::isGoodMuon(*the_muon, muon::AllGlobalMuons);
614     _muon_isGood_AllStandAloneMuons = muon::isGoodMuon(*the_muon, muon::AllStandAloneMuons);
615     _muon_isGood_AllTrackerMuons = muon::isGoodMuon(*the_muon, muon::AllTrackerMuons);
616     _muon_isGood_TrackerMuonArbitrated = muon::isGoodMuon(*the_muon, muon::TrackerMuonArbitrated);
617     _muon_isGood_AllArbitrated = muon::isGoodMuon(*the_muon, muon::AllArbitrated);
618     _muon_isGood_GlobalMuonPromptTight = muon::isGoodMuon(*the_muon, muon::GlobalMuonPromptTight);
619     _muon_isGood_TMLastStationLoose = muon::isGoodMuon(*the_muon, muon::TMLastStationLoose);
620     _muon_isGood_TMLastStationTight = muon::isGoodMuon(*the_muon, muon::TMLastStationTight);
621     _muon_isGood_TM2DCompatibilityLoose = muon::isGoodMuon(*the_muon, muon::TM2DCompatibilityLoose);
622     _muon_isGood_TM2DCompatibilityTight = muon::isGoodMuon(*the_muon, muon::TM2DCompatibilityTight);
623     _muon_isGood_TMOneStationLoose = muon::isGoodMuon(*the_muon, muon::TMOneStationLoose);
624     _muon_isGood_TMOneStationTight = muon::isGoodMuon(*the_muon, muon::TMOneStationTight);
625     _muon_isGood_TMLastStationOptimizedLowPtLoose = muon::isGoodMuon(*the_muon, muon::TMLastStationOptimizedLowPtLoose);
626     _muon_isGood_TMLastStationOptimizedLowPtTight = muon::isGoodMuon(*the_muon, muon::TMLastStationOptimizedLowPtTight);
627 kukartse 1.24 }
628     if (_lepton_d0_err>0.0000000001) _lepton_d0_significance = fabs(_lepton_d0)/_lepton_d0_err;
629    
630 kukartse 1.1 _lepton_is_muon = 1;
631     lepton_source = _muonSource;
632 kukartse 1.25 _lepton_et = the_muon->et();
633     _lepton_pt = the_muon->pt();
634     _lepton_eta = the_muon->eta();
635     _lepton_phi = the_muon->phi();
636     _lepton_energy = the_muon->energy();
637     if ( !(the_muon->isIsolationValid()) ) {
638 kukartse 1.24 cout << "Isolation info is invalid" << endl;
639     _lepton_track_iso = -1e10;
640     _lepton_calo_iso = -1e10;
641     _lepton_ecal_iso = -1e10;
642     _lepton_hcal_iso = -1e10;
643     _lepton_user_iso = -1e10;
644     }
645     else{
646     //cout << "Isolation info is valid..." << endl;
647 kukartse 1.25 _lepton_track_iso = the_muon->isolationR03().sumPt;
648     _lepton_ecal_iso = the_muon->isolationR03().emEt;
649     _lepton_hcal_iso = the_muon->isolationR03().hadEt;
650 kukartse 1.24 //_lepton_calo_iso = (*muons)[good_electron_key[0]].caloIso();
651     _lepton_calo_iso = _lepton_ecal_iso + _lepton_hcal_iso;
652 kukartse 1.25 _lepton_user_iso = the_muon->userIso();
653 kukartse 1.24 _lepton_IsoDeposit_em = (*muons)[0].isolationR03().emVetoEt;
654     _lepton_IsoDeposit_had = (*muons)[0].isolationR03().hadVetoEt;
655     }
656 kukartse 1.7 }
657     else{
658 kukartse 1.25 /*
659 kukartse 1.7 _lepton_is_muon = 0;
660     lepton_source = _electronSource;
661     _lepton_et = (*electrons)[good_electron_key[0]].et();
662     _lepton_pt = (*electrons)[good_electron_key[0]].pt();
663     _lepton_eta = (*electrons)[good_electron_key[0]].eta();
664     _lepton_phi = (*electrons)[good_electron_key[0]].phi();
665     _lepton_energy = (*electrons)[good_electron_key[0]].energy();
666     _lepton_track_iso = (*electrons)[good_electron_key[0]].trackIso();
667     _lepton_calo_iso = (*electrons)[good_electron_key[0]].caloIso();
668     _lepton_ecal_iso = (*electrons)[good_electron_key[0]].ecalIso();
669     _lepton_hcal_iso = (*electrons)[good_electron_key[0]].hcalIso();
670     _lepton_user_iso = (*electrons)[good_electron_key[0]].userIso();
671 kukartse 1.24 _lepton_IsoDeposit_em = -1e10;
672     _lepton_IsoDeposit_had = -1e10;
673 kukartse 1.17 //
674     //_____ is electron from the photon conversion? ___________________
675     //
676     //
677     //_____ v.1, conversion by Francis Bostock
678     //
679     _is_conv = ConversionAlgo((*electrons)[good_electron_key[0]], tracks);
680     //
681     //_____ v.2, conversion by Puneeth Kalavase, modified
682     //
683     const pat::Electron & el = (*electrons)[good_electron_key[0]];
684     for(edm::View<reco::Track>::const_iterator track = tracks->begin(); track != tracks->end(); track++) {
685     std::pair<double,double> dist_dcot = getConversionInfo(el,
686     *track,
687     _bs,
688     _bfield);
689     _e_dist->push_back(dist_dcot.first);
690     _e_dcot->push_back(dist_dcot.second);
691     //cout << "CONVERSION v.2: dist=" << dist_dcot.first << ", dcot=" << dist_dcot.second << endl;
692     }
693     //cout << "CONVERSION v.1: " << _is_conv << endl;
694 kukartse 1.25 */
695 kukartse 1.7 }
696 kukartse 1.14 //
697 kukartse 1.25
698    
699 kukartse 1.28 //if ( nOfGoodMuons.getCount() > 0 && muTrack.isNonnull() && muTrack.isAvailable()){
700     //}
701 kukartse 1.25 /*
702 kukartse 1.7 if ( nOfGoodElectrons.getCount() > 0 ){
703     //
704 kukartse 1.13 // _____ electron ID ______________________________________________
705     //
706 kukartse 1.7 //cout << " ------------### Electron ID labels: " << endl;
707     //const vector<std::pair<std::string,float> > & _ids = (*electrons)[good_electron_key[0]].electronIDs();
708     //for ( vector<std::pair<std::string,float> >::const_iterator _id = _ids.begin(); _id!=_ids.end(); _id++){
709     // cout << _id->first << ": " << _id->second << endl;
710 kukartse 1.5 //}
711 kukartse 1.7 _eidLoose = (*electrons)[good_electron_key[0]].electronID("eidLoose");
712     _eidRobustHighEnergy = (*electrons)[good_electron_key[0]].electronID("eidRobustHighEnergy");
713     _eidRobustLoose = (*electrons)[good_electron_key[0]].electronID("eidRobustLoose");
714     _eidRobustTight = (*electrons)[good_electron_key[0]].electronID("eidRobustTight");
715     _eidTight = (*electrons)[good_electron_key[0]].electronID("eidTight");
716 kukartse 1.13 _GsfElectron_classification = (*electrons)[good_electron_key[0]].classification();
717     _GsfElectron_hadronicOverEm = (*electrons)[good_electron_key[0]].hadronicOverEm();
718 kukartse 1.24 //_GsfElectron_caloEnergyError = (*electrons)[good_electron_key[0]].caloEnergyError();
719 kukartse 1.13 _GsfElectron_trackMomentumError = (*electrons)[good_electron_key[0]].trackMomentumError();
720     //_GsfElectron_numberOfClusters = (*electrons)[good_electron_key[0]].numberOfClusters();
721     _GsfElectron_caloEnergy = (*electrons)[good_electron_key[0]].caloEnergy();
722     _GsfElectron_eSuperClusterOverP = (*electrons)[good_electron_key[0]].eSuperClusterOverP();
723     _GsfElectron_eSeedClusterOverPout = (*electrons)[good_electron_key[0]].eSeedClusterOverPout();
724     _GsfElectron_deltaEtaSuperClusterTrackAtVtx = (*electrons)[good_electron_key[0]].deltaEtaSuperClusterTrackAtVtx();
725     _GsfElectron_deltaEtaSeedClusterTrackAtCalo = (*electrons)[good_electron_key[0]].deltaEtaSeedClusterTrackAtCalo();
726     _GsfElectron_deltaPhiSuperClusterTrackAtVtx = (*electrons)[good_electron_key[0]].deltaPhiSuperClusterTrackAtVtx();
727     _GsfElectron_deltaPhiSeedClusterTrackAtCalo = (*electrons)[good_electron_key[0]].deltaPhiSeedClusterTrackAtCalo();
728 kukartse 1.7 }
729 kukartse 1.25 */
730 kukartse 1.13 //
731     //_____ MET variables _______________________________________________
732     //
733 kukartse 1.7 _met_et = METs->begin()->et();
734 kukartse 1.1 _met_pt = METs->begin()->pt();
735     _met_eta = METs->begin()->eta();
736     _met_phi = METs->begin()->phi();
737     _met_energy = METs->begin()->energy();
738 kukartse 1.7 //
739 kukartse 1.13 //_____ b tagging ___________________________________________________
740     //
741 kukartse 1.1 _n_tagged_jets_trackCounting_loose = n_trackCounting_loose.getCount();
742     _n_tagged_jets_trackCounting_medium = n_trackCounting_medium.getCount();
743     _n_tagged_jets_trackCounting_tight = n_trackCounting_tight.getCount();
744     _n_tagged_jets_jetProb_loose = n_jetProb_loose.getCount();
745     _n_tagged_jets_jetProb_medium = n_jetProb_medium.getCount();
746     _n_tagged_jets_jetProb_tight = n_jetProb_tight.getCount();
747 kukartse 1.24
748 kukartse 1.7 //
749 kukartse 1.13 //_____ MVA kinematic variables _____________________________________
750     //
751 kukartse 1.28 if ( _n_jets >= 4 &&
752     ((_n_muons >= 1 && is_muon)
753     ||
754     (_n_electrons >= 1 && !is_muon))
755     ){
756     LJetsTopoVars ljets_topo_vars( _jetSource, _METSource, lepton_source, is_muon );
757     _n_removed_jets = ljets_topo_vars . setEvent( iEvent, min_dr_jet_lepton );
758     //
759     _aplanarity = ljets_topo_vars . aplanarity();
760     _centrality = ljets_topo_vars . centrality();
761     _sphericity = ljets_topo_vars . sphericity();
762     _ht = ljets_topo_vars . ht();
763     _htPlusLepton = ljets_topo_vars . htpluslepton();
764     _metHtPlusLepton = ljets_topo_vars . methtpluslepton();
765     _h = ljets_topo_vars . h();
766     _ktMinPrime = ljets_topo_vars . ktMinPrime();
767     _dPhiLMet = ljets_topo_vars . dphiLepMet();
768     _minDijetMass = ljets_topo_vars . minDijetMass();
769     _maxJetEta = ljets_topo_vars . maxJetEta();
770     _et3 = ljets_topo_vars . Et3();
771     _minDiJetDeltaR = ljets_topo_vars . minDijetDeltaR();
772     _leptonJetDeltaR = ljets_topo_vars . LeptonJet_DeltaR();
773     _ht2p = ljets_topo_vars . getHt2p();
774     _jet1Jet2DeltaR = ljets_topo_vars . Jet1Jet2_DeltaR();
775     _jet1Jet2DeltaPhi = ljets_topo_vars . Jet1Jet2_DeltaPhi();
776     _jet1Jet2_M = ljets_topo_vars . Jet1Jet2_M();
777     _jet1Jet2_Pt = ljets_topo_vars . Jet1Jet2_Pt();
778     _jet1Jet2W_M = ljets_topo_vars . Jet1Jet2W_M();
779     _jet1Jet2W_Pt = ljets_topo_vars . Jet1Jet2W_Pt();
780     _hz = ljets_topo_vars . Hz();
781     _HT2 = ljets_topo_vars . HT2();
782     _HT2prime = ljets_topo_vars . HT2prime();
783     _W_MT = ljets_topo_vars . W_MT();
784     _W_M = ljets_topo_vars . W_M();
785     _W_Pt = ljets_topo_vars . W_Pt();
786     _DphiJMET = ljets_topo_vars . DphiJMET();
787     //
788     //_____ Ht __________________________________________________________
789     //
790     _getHt = ljets_topo_vars . getHt();
791     _getHtp = ljets_topo_vars . getHtp();
792     _getHtpp = ljets_topo_vars . getHtpp();
793     _getHt2 = ljets_topo_vars . getHt2();
794     _getHt2p = ljets_topo_vars . getHt2p();
795     _getHt2pp = ljets_topo_vars . getHt2pp();
796     _getHt3 = ljets_topo_vars . getHt3();
797     _getHt3p = ljets_topo_vars . getHt3p();
798     _getHt3pp = ljets_topo_vars . getHt3pp();
799     _getCen = ljets_topo_vars . getCen();
800     _getNJW = ljets_topo_vars . getNJW();
801     _getJetEtaMax = ljets_topo_vars . getJetEtaMax();
802     _getMdijetMin = ljets_topo_vars . getMdijetMin();
803     _getMtjets = ljets_topo_vars . getMtjets();
804     _getSqrtsT = ljets_topo_vars . getSqrtsT();
805     _getMtAurelio = ljets_topo_vars . getMtAurelio();
806     _getPzOverHT = ljets_topo_vars . getPzOverHT();
807     _getMevent = ljets_topo_vars . getMevent();
808     _getM123inv = ljets_topo_vars . getM123inv();
809     _getEta2Sum = ljets_topo_vars . getEta2Sum();
810     _getMwRec = ljets_topo_vars . getMwRec();
811     _getH = ljets_topo_vars . getH();
812     //
813     //_____ event topo __________________________________________________
814     //
815     _getSph = ljets_topo_vars . getSph();
816     _getApl = ljets_topo_vars . getApl();
817     _getAplMu = ljets_topo_vars . getAplMu();
818     //
819     //_____ Kt __________________________________________________________
820     //
821     _getKtminp = ljets_topo_vars . getKtminp();
822     _getKtminpReduced = ljets_topo_vars . getKtminpReduced();
823     _getDrMinJetJet = ljets_topo_vars . getDrMinJetJet();
824     //
825     //_____ mT __________________________________________________________
826     //
827     _getDphiMuMet = ljets_topo_vars . getDphiMuMet();
828     _getMt = ljets_topo_vars . getMt();
829     }
830 kukartse 1.13 //
831     //_____ fill the tree _______________________________________________
832     //
833 kukartse 1.1 _tree -> Fill();
834     }
835     }
836    
837    
838     void TtLJetsAnalyzer::beginJob(const edm::EventSetup&)
839     {
840 kukartse 1.13 edm::LogInfo("TtLJetsAnalyzer") << "beginJob()..." << endl;
841     _lepton_d0 = -10.0;
842     //
843 kukartse 1.20 _pdf_weights = new vector<double>();
844     //
845 kukartse 1.17 _e_dist = new vector<double>();
846     _e_dcot = new vector<double>();
847     //
848 kukartse 1.11 _jet_pt = new vector<double>();
849     _jet_pz = new vector<double>();
850     _jet_eta = new vector<double>();
851     _jet_phi = new vector<double>();
852     _jet_et = new vector<double>();
853     _jet_energy = new vector<double>();
854     _jet_flavor = new vector<int>();
855 kukartse 1.12 //
856     _muon_pt = new vector<double>();
857     _muon_pz = new vector<double>();
858     _muon_eta = new vector<double>();
859     _muon_phi = new vector<double>();
860     _muon_et = new vector<double>();
861     _muon_energy = new vector<double>();
862     _muon_flavor = new vector<int>();
863     //
864     _electron_pt = new vector<double>();
865     _electron_pz = new vector<double>();
866     _electron_eta = new vector<double>();
867     _electron_phi = new vector<double>();
868     _electron_et = new vector<double>();
869     _electron_energy = new vector<double>();
870     _electron_flavor = new vector<int>();
871     //
872 kukartse 1.13 // _____ b tagging ____________________________________________________
873     //
874 kukartse 1.7 _b_tagger_label = new vector<string>;
875     _b_tagger_discr = new vector<float>;
876 kukartse 1.24
877     // using TFileService instead, see constructor
878 kukartse 1.13 //_file = new TFile(_outFile . c_str(), "RECREATE");
879     //_tree = new TTree("ttljets", "ttljets", 64000000);
880     //
881     //_____ Create tree branches __________________________________________
882 kukartse 1.26 _tree -> Branch("event", &_event, "event/I" );
883     _tree -> Branch("lumi", &ilumi, "lumi/I" );
884     _tree -> Branch("run", &irun, "run/I" );
885 kukartse 1.1 b_process_id = _tree -> Branch("process_id", &_process_id, "process_id/I" );
886     b_n_jets = _tree -> Branch("n_jets", &_n_jets, "n_jets/I" );
887 kukartse 1.11 b_n_removed_jets = _tree -> Branch("n_removed_jets", &_n_removed_jets, "n_removed_jets/I" );
888 kukartse 1.1 b_n_met = _tree -> Branch("n_met", &_n_met, "n_met/I" );
889     b_n_muons = _tree -> Branch("n_muons", &_n_muons, "n_muons/I" );
890     b_n_electrons = _tree -> Branch("n_electrons", &_n_electrons, "n_electrons/I" );
891     b_lepton_is_muon = _tree -> Branch("lepton_is_muon", &_lepton_is_muon, "lepton_is_muon/I" );
892     b_event_weight = _tree -> Branch("event_weight", &_event_weight, "event_weight/D" );
893 kukartse 1.7 b_lepton_et = _tree -> Branch("lepton_et", &_lepton_et, "lepton_et/D" );
894 kukartse 1.1 b_lepton_pt = _tree -> Branch("lepton_pt", &_lepton_pt, "lepton_pt/D" );
895     b_lepton_eta = _tree -> Branch("lepton_eta", &_lepton_eta, "lepton_eta/D" );
896     b_lepton_phi = _tree -> Branch("lepton_phi", &_lepton_phi, "lepton_phi/D" );
897     b_lepton_energy = _tree -> Branch("lepton_energy", &_lepton_energy, "lepton_energy/D" );
898 kukartse 1.14 b_lepton_jet_min_dr = _tree->Branch("lepton_jet_min_dr", &_lepton_jet_min_dr, "lepton_jet_min_dr/D");
899     b_lepton_ptrel = _tree->Branch("lepton_ptrel", &_lepton_ptrel, "lepton_ptrel/D");
900     b_lepton_d0 = _tree->Branch("lepton_d0", &_lepton_d0, "lepton_d0/D");
901     b_lepton_d0_err = _tree->Branch("lepton_d0_err", &_lepton_d0_err, "lepton_d0_err/D");
902     b_lepton_d0_significance = _tree->Branch("lepton_d0_significance", &_lepton_d0_significance, "lepton_d0_significance/D");
903 kukartse 1.16 _tree -> Branch("muon_track_nhits", &_muon_track_nhits, "muon_track_nhits/I" );
904 kukartse 1.17 _tree -> Branch("is_conv", &_is_conv, "is_conv/O" );
905     _tree -> Branch("e_dist", &_e_dist );
906     _tree -> Branch("e_dcot", &_e_dcot );
907 kukartse 1.21 _tree -> Branch("pdf_weights", &_pdf_weights );
908 kukartse 1.20 _tree -> Branch("weight_pdf_pos", &_weight_pdf_pos, "weight_pdf_pos/D" );
909     _tree -> Branch("weight_pdf_neg", &_weight_pdf_neg, "weight_pdf_neg/D" );
910 kukartse 1.4 b_muon_track_chi2 = _tree -> Branch("muon_track_chi2", &_muon_track_chi2, "muon_track_chi/D" );
911     b_muon_track_ndof = _tree -> Branch("muon_track_ndof", &_muon_track_ndof, "muon_track_ndof/D" );
912     b_muon_track_nChi2 = _tree -> Branch("muon_track_nChi2", &_muon_track_nChi2, "muon_track_nChi2/D" );
913 kukartse 1.1 b_lepton_track_iso = _tree -> Branch("lepton_track_iso", &_lepton_track_iso, "lepton_track_iso/D" );
914     b_lepton_calo_iso = _tree -> Branch("lepton_calo_iso", &_lepton_calo_iso, "lepton_calo_iso/D" );
915 kukartse 1.3 b_lepton_ecal_iso = _tree -> Branch("lepton_ecal_iso", &_lepton_ecal_iso, "lepton_ecal_iso/D" );
916     b_lepton_hcal_iso = _tree -> Branch("lepton_hcal_iso", &_lepton_hcal_iso, "lepton_hcal_iso/D" );
917     b_lepton_user_iso = _tree -> Branch("lepton_user_iso", &_lepton_user_iso, "lepton_user_iso/D" );
918 kukartse 1.11 b_lepton_IsoDeposit_em = _tree -> Branch("lepton_IsoDeposit_em", &_lepton_IsoDeposit_em, "lepton_IsoDeposit_em/D" );
919     b_lepton_IsoDeposit_had = _tree -> Branch("lepton_IsoDeposit_had", &_lepton_IsoDeposit_had, "lepton_IsoDeposit_had/D" );
920 kukartse 1.7 b_met_et = _tree -> Branch("met_et", &_met_et, "met_et/D" );
921 kukartse 1.1 b_met_pt = _tree -> Branch("met_pt", &_met_pt, "met_pt/D" );
922     b_met_eta = _tree -> Branch("met_eta", &_met_eta, "met_eta/D" );
923     b_met_phi = _tree -> Branch("met_phi", &_met_phi, "met_phi/D" );
924     b_met_energy = _tree -> Branch("met_energy", &_met_energy, "met_energy/D" );
925 kukartse 1.7 b_jet1_et = _tree -> Branch("jet1_et", &_jet1_et, "jet1_et/D" );
926 kukartse 1.1 b_jet1_pt = _tree -> Branch("jet1_pt", &_jet1_pt, "jet1_pt/D" );
927     b_jet1_eta = _tree -> Branch("jet1_eta", &_jet1_eta, "jet1_eta/D" );
928     b_jet1_phi = _tree -> Branch("jet1_phi", &_jet1_phi, "jet1_phi/D" );
929     b_jet1_energy = _tree -> Branch("jet1_energy", &_jet1_energy, "jet1_energy/D" );
930 kukartse 1.7 b_jet2_et = _tree -> Branch("jet2_et", &_jet2_et, "jet2_et/D" );
931 kukartse 1.1 b_jet2_pt = _tree -> Branch("jet2_pt", &_jet2_pt, "jet2_pt/D" );
932     b_jet2_eta = _tree -> Branch("jet2_eta", &_jet2_eta, "jet2_eta/D" );
933     b_jet2_phi = _tree -> Branch("jet2_phi", &_jet2_phi, "jet2_phi/D" );
934     b_jet2_energy = _tree -> Branch("jet2_energy", &_jet2_energy, "jet2_energy/D" );
935 kukartse 1.7 b_jet3_et = _tree -> Branch("jet3_et", &_jet3_et, "jet3_et/D" );
936 kukartse 1.1 b_jet3_pt = _tree -> Branch("jet3_pt", &_jet3_pt, "jet3_pt/D" );
937     b_jet3_eta = _tree -> Branch("jet3_eta", &_jet3_eta, "jet3_eta/D" );
938     b_jet3_phi = _tree -> Branch("jet3_phi", &_jet3_phi, "jet3_phi/D" );
939     b_jet3_energy = _tree -> Branch("jet3_energy", &_jet3_energy, "jet3_energy/D" );
940 kukartse 1.7 b_jet4_et = _tree -> Branch("jet4_et", &_jet4_et, "jet4_et/D" );
941 kukartse 1.1 b_jet4_pt = _tree -> Branch("jet4_pt", &_jet4_pt, "jet4_pt/D" );
942     b_jet4_eta = _tree -> Branch("jet4_eta", &_jet4_eta, "jet4_eta/D" );
943     b_jet4_phi = _tree -> Branch("jet4_phi", &_jet4_phi, "jet4_phi/D" );
944     b_jet4_energy = _tree -> Branch("jet4_energy", &_jet4_energy, "jet4_energy/D" );
945 kukartse 1.7 //
946 kukartse 1.13 //_____ MVA kinematic variables _______________________________________
947     //
948 kukartse 1.1 b_aplanarity = _tree -> Branch("aplanarity", &_aplanarity, "aplanarity/D" );
949     b_centrality = _tree -> Branch("centrality", &_centrality, "centrality/D" );
950     b_sphericity = _tree -> Branch("sphericity", &_sphericity, "sphericity/D" );
951     b_ht = _tree -> Branch("ht", &_ht, "ht/D" );
952     b_htPlusLepton = _tree -> Branch("htPlusLepton", &_htPlusLepton, "htPlusLepton/D" );
953     b_metHtPlusLepton = _tree -> Branch("metHtPlusLepton", &_metHtPlusLepton, "metHtPlusLepton/D" );
954     b_h = _tree -> Branch("h", &_h, "h/D" );
955     b_ktMinPrime = _tree -> Branch("ktMinPrime", &_ktMinPrime, "ktMinPrime/D" );
956     b_dPhiLMet = _tree -> Branch("dPhiLMet", &_dPhiLMet, "dPhiLMet/D" );
957     b_minDijetMass = _tree -> Branch("minDijetMass", &_minDijetMass, "minDijetMass/D" );
958     b_maxJetEta = _tree -> Branch("maxJetEta", &_maxJetEta, "maxJetEta/D" );
959     b_et3 = _tree -> Branch("et3", &_et3, "et3/D" );
960     b_minDiJetDeltaR = _tree -> Branch("minDiJetDeltaR", &_minDiJetDeltaR, "minDiJetDeltaR/D" );
961     b_leptonJetDeltaR = _tree -> Branch("leptonJetDeltaR", &_leptonJetDeltaR, "leptonJetDeltaR/D" );
962     b_ht2p = _tree -> Branch("ht2p", &_ht2p, "ht2p/D" );
963     b_jet1Jet2DeltaR = _tree -> Branch("jet1Jet2DeltaR", &_jet1Jet2DeltaR, "jet1Jet2DeltaR/D" );
964     b_jet1Jet2DeltaPhi = _tree -> Branch("jet1Jet2DeltaPhi", &_jet1Jet2DeltaPhi, "jet1Jet2DeltaPhi/D" );
965     b_jet1Jet2_M = _tree -> Branch("jet1Jet2_M", &_jet1Jet2_M, "jet1Jet2_M/D" );
966     b_jet1Jet2_Pt = _tree -> Branch("jet1Jet2_Pt", &_jet1Jet2_Pt, "jet1Jet2_Pt/D" );
967     b_jet1Jet2W_M = _tree -> Branch("jet1Jet2W_M", &_jet1Jet2W_M, "jet1Jet2W_M/D" );
968     b_jet1Jet2W_Pt = _tree -> Branch("jet1Jet2W_Pt", &_jet1Jet2W_Pt, "jet1Jet2W_Pt/D" );
969     b_hz = _tree -> Branch("hz", &_hz, "hz/D" );
970     b_HT2 = _tree -> Branch("HT2", &_HT2, "HT2/D" );
971     b_HT2prime = _tree -> Branch("HT2prime", &_HT2prime, "HT2prime/D" );
972     b_W_MT = _tree -> Branch("W_MT", &_W_MT, "W_MT/D" );
973     b_W_M = _tree -> Branch("W_M", &_W_M, "W_M/D" );
974     b_W_Pt = _tree -> Branch("W_Pt", &_W_Pt, "W_Pt/D" );
975     b_DphiJMET = _tree -> Branch("DphiJMET", &_DphiJMET, "DphiJMET/D" );
976 kukartse 1.13 //
977     //____________ Ht _____________________________________________________
978     //
979 kukartse 1.1 b_getHt = _tree -> Branch("getHt", &_getHt, "getHt/D" );
980     b_getHtp = _tree -> Branch("getHtp", &_getHtp, "getHtp/D" );
981     b_getHtpp = _tree -> Branch("getHtpp", &_getHtpp, "getHtpp/D" );
982     b_getHt2 = _tree -> Branch("getHt2", &_getHt2, "getHt2/D" );
983     b_getHt2p = _tree -> Branch("getHt2p", &_getHt2p, "getHt2p/D" );
984     b_getHt2pp = _tree -> Branch("getHt2pp", &_getHt2pp, "getHt2pp/D" );
985     b_getHt3 = _tree -> Branch("getHt3", &_getHt3, "getHt3/D" );
986     b_getHt3p = _tree -> Branch("getHt3p", &_getHt3p, "getHt3p/D" );
987     b_getHt3pp = _tree -> Branch("getHt3pp", &_getHt3pp, "getHt3pp/D" );
988     b_getCen = _tree -> Branch("getCen", &_getCen, "getCen/D" );
989     b_getNJW = _tree -> Branch("getNJW", &_getNJW, "getNJW/D" );
990     b_getJetEtaMax = _tree -> Branch("getJetEtaMax", &_getJetEtaMax, "getJetEtaMax/D" );
991     b_getMdijetMin = _tree -> Branch("getMdijetMin", &_getMdijetMin, "getMdijetMin/D" );
992     b_getMtjets = _tree -> Branch("getMtjets", &_getMtjets, "getMtjets/D" );
993     b_getSqrtsT = _tree -> Branch("getSqrtsT", &_getSqrtsT, "getSqrtsT/D" );
994     b_getMtAurelio = _tree -> Branch("getMtAurelio", &_getMtAurelio, "getMtAurelio/D" );
995     b_getPzOverHT = _tree -> Branch("getPzOverHT", &_getPzOverHT, "getPzOverHT/D" );
996     b_getMevent = _tree -> Branch("getMevent", &_getMevent, "getMevent/D" );
997     b_getM123inv = _tree -> Branch("getM123inv", &_getM123inv, "getM123inv/D" );
998     b_getEta2Sum = _tree -> Branch("getEta2Sum", &_getEta2Sum, "getEta2Sum/D" );
999     b_getMwRec = _tree -> Branch("getMwRec", &_getMwRec, "getMwRec/D" );
1000     b_getH = _tree -> Branch("getH", &_getH, "getH/D" );
1001 kukartse 1.7 //
1002 kukartse 1.13 //____ event topology _________________________________________________
1003     //
1004 kukartse 1.1 b_getSph = _tree -> Branch("getSph", &_getSph, "getSph/D" );
1005     b_getApl = _tree -> Branch("getApl", &_getApl, "getApl/D" );
1006     b_getAplMu = _tree -> Branch("getAplMu", &_getAplMu, "getAplMu/D" );
1007 kukartse 1.7 //
1008 kukartse 1.13 //____ Kt _____________________________________________________________
1009     //
1010 kukartse 1.1 b_getKtminp = _tree -> Branch("getKtminp", &_getKtminp, "getKtminp/D" );
1011     b_getKtminpReduced = _tree -> Branch("getKtminpReduced", &_getKtminpReduced, "getKtminpReduced/D" );
1012     b_getDrMinJetJet = _tree -> Branch("getDrMinJetJet", &_getDrMinJetJet, "getDrMinJetJet/D" );
1013 kukartse 1.7 //
1014 kukartse 1.13 //____ mT _____________________________________________________________
1015     //
1016 kukartse 1.1 b_getDphiMuMet = _tree -> Branch("getDphiMuMet", &_getDphiMuMet, "getDphiMuMet/D" );
1017     b_getMt = _tree -> Branch("getMt", &_getMt, "getMt/D" );
1018 kukartse 1.7 //
1019 kukartse 1.13 // _____ electron ID __________________________________________________
1020     //
1021 kukartse 1.7 b_eidLoose = _tree -> Branch("eidLoose", &_eidLoose, "eidLoose/F");
1022     b_eidRobustHighEnergy = _tree -> Branch("eidRobustHighEnergy", &_eidRobustHighEnergy, "eidRobustHighEnergy/F");
1023     b_eidRobustLoose = _tree -> Branch("eidRobustLoose", &_eidRobustLoose, "eidRobustLoose/F");
1024     b_eidRobustTight = _tree -> Branch("eidRobustTight", &_eidRobustTight, "eidRobustTight/F");
1025     b_eidTight = _tree -> Branch("eidTight", &_eidTight, "eidTight/F");
1026     b_GsfElectron_classification = _tree -> Branch("GsfElectron_classification", &_GsfElectron_classification, "GsfElectron_classification/I");
1027     b_GsfElectron_hadronicOverEm = _tree -> Branch("GsfElectron_hadronicOverEm", &_GsfElectron_hadronicOverEm, "GsfElectron_hadronicOverEm/D");
1028     b_GsfElectron_caloEnergyError = _tree -> Branch("GsfElectron_caloEnergyError", &_GsfElectron_caloEnergyError, "GsfElectron_caloEnergyError/D");
1029     b_GsfElectron_trackMomentumError = _tree -> Branch("GsfElectron_trackMomentumError", &_GsfElectron_trackMomentumError, "GsfElectron_trackMomentumError/D");
1030     //b_GsfElectron_numberOfClusters = _tree -> Branch("GsfElectron_numberOfClusters", &_GsfElectron_numberOfClusters, "GsfElectron_numberOfClusters/I");
1031     b_GsfElectron_caloEnergy = _tree -> Branch("GsfElectron_caloEnergy", &_GsfElectron_caloEnergy, "GsfElectron_caloEnergy/D");
1032     b_GsfElectron_eSuperClusterOverP = _tree -> Branch("GsfElectron_eSuperClusterOverP", &_GsfElectron_eSuperClusterOverP, "GsfElectron_eSuperClusterOverP/D");
1033     b_GsfElectron_eSeedClusterOverPout = _tree -> Branch("GsfElectron_eSeedClusterOverPout", &_GsfElectron_eSeedClusterOverPout, "GsfElectron_eSeedClusterOverPout/D");
1034     b_GsfElectron_deltaEtaSuperClusterTrackAtVtx = _tree -> Branch("GsfElectron_deltaEtaSuperClusterTrackAtVtx", &_GsfElectron_deltaEtaSuperClusterTrackAtVtx, "GsfElectron_deltaEtaSuperClusterTrackAtVtx/D");
1035     b_GsfElectron_deltaEtaSeedClusterTrackAtCalo = _tree -> Branch("GsfElectron_deltaEtaSeedClusterTrackAtCalo", &_GsfElectron_deltaEtaSeedClusterTrackAtCalo, "GsfElectron_deltaEtaSeedClusterTrackAtCalo/D");
1036     b_GsfElectron_deltaPhiSuperClusterTrackAtVtx = _tree -> Branch("GsfElectron_deltaPhiSuperClusterTrackAtVtx", &_GsfElectron_deltaPhiSuperClusterTrackAtVtx, "GsfElectron_deltaPhiSuperClusterTrackAtVtx/D");
1037     b_GsfElectron_deltaPhiSeedClusterTrackAtCalo = _tree -> Branch("GsfElectron_deltaPhiSeedClusterTrackAtCalo", &_GsfElectron_deltaPhiSeedClusterTrackAtCalo, "GsfElectron_deltaPhiSeedClusterTrackAtCalo/D");
1038     //
1039 kukartse 1.13 // _____ b tagging ____________________________________________________
1040     //
1041 kukartse 1.11 b_jet_pt = _tree -> Branch("jet_pt", &_jet_pt);
1042     b_jet_pz = _tree -> Branch("jet_pz", &_jet_pz);
1043     b_jet_eta = _tree -> Branch("jet_eta", &_jet_eta);
1044     b_jet_phi = _tree -> Branch("jet_phi", &_jet_phi);
1045     b_jet_et = _tree -> Branch("jet_et", &_jet_et);
1046     b_jet_energy = _tree -> Branch("jet_energy", &_jet_energy);
1047     b_jet_flavor = _tree -> Branch("jet_flavor", &_jet_flavor);
1048 kukartse 1.12 //
1049     b_muon_pt = _tree -> Branch("v_muon_pt", &_muon_pt);
1050     b_muon_pz = _tree -> Branch("v_muon_pz", &_muon_pz);
1051     b_muon_eta = _tree -> Branch("v_muon_eta", &_muon_eta);
1052     b_muon_phi = _tree -> Branch("v_muon_phi", &_muon_phi);
1053     b_muon_et = _tree -> Branch("v_muon_et", &_muon_et);
1054     b_muon_energy = _tree -> Branch("v_muon_energy", &_muon_energy);
1055     b_muon_flavor = _tree -> Branch("v_muon_flavor", &_muon_flavor);
1056     //
1057     b_electron_pt = _tree -> Branch("v_electron_pt", &_electron_pt);
1058     b_electron_pz = _tree -> Branch("v_electron_pz", &_electron_pz);
1059     b_electron_eta = _tree -> Branch("v_electron_eta", &_electron_eta);
1060     b_electron_phi = _tree -> Branch("v_electron_phi", &_electron_phi);
1061     b_electron_et = _tree -> Branch("v_electron_et", &_electron_et);
1062     b_electron_energy = _tree -> Branch("v_electron_energy", &_electron_energy);
1063     b_electron_flavor = _tree -> Branch("v_electron_flavor", &_electron_flavor);
1064     //
1065 kukartse 1.7 b_b_tagger_label = _tree->Branch("b_tagger_label", &_b_tagger_label);
1066     b_b_tagger_discr = _tree->Branch("b_tagger_discr", &_b_tagger_discr);
1067 kukartse 1.13 //
1068 kukartse 1.1 b_n_tagged_jets_trackCounting_loose = _tree -> Branch("n_tagged_jets_trackCounting_loose", &_n_tagged_jets_trackCounting_loose, "n_tagged_jets_trackCounting_loose/I" );
1069     b_n_tagged_jets_trackCounting_medium = _tree -> Branch("n_tagged_jets_trackCounting_medium", &_n_tagged_jets_trackCounting_medium, "n_tagged_jets_trackCounting_medium/I" );
1070     b_n_tagged_jets_trackCounting_tight = _tree -> Branch("n_tagged_jets_trackCounting_tight", &_n_tagged_jets_trackCounting_tight, "n_tagged_jets_trackCounting_tight/I" );
1071     b_n_tagged_jets_jetProb_loose = _tree -> Branch("n_tagged_jets_jetProb_loose", &_n_tagged_jets_jetProb_loose, "n_tagged_jets_jetProb_loose/I" );
1072     b_n_tagged_jets_jetProb_medium = _tree -> Branch("n_tagged_jets_jetProb_medium", &_n_tagged_jets_jetProb_medium, "n_tagged_jets_jetProb_medium/I" );
1073     b_n_tagged_jets_jetProb_tight = _tree -> Branch("n_tagged_jets_jetProb_tight", &_n_tagged_jets_jetProb_tight, "n_tagged_jets_jetProb_tight/I" );
1074 kukartse 1.5 //
1075 kukartse 1.13 //_____ muon quality __________________________________________________
1076 kukartse 1.5 //
1077     b_muon_isGood_All = _tree -> Branch("muon_isGood_All", &_muon_isGood_All, "muon_isGood_All/O" );
1078     b_muon_isGood_AllGlobalMuons = _tree -> Branch("muon_isGood_AllGlobalMuons", &_muon_isGood_AllGlobalMuons, "muon_isGood_AllGlobalMuons/O");
1079     b_muon_isGood_AllStandAloneMuons = _tree -> Branch("muon_isGood_AllStandAloneMuons", &_muon_isGood_AllStandAloneMuons, "muon_isGood_AllStandAloneMuons/O");
1080     b_muon_isGood_AllTrackerMuons = _tree -> Branch("muon_isGood_AllTrackerMuons", &_muon_isGood_AllTrackerMuons, "muon_isGood_AllTrackerMuons/O");
1081     b_muon_isGood_TrackerMuonArbitrated = _tree -> Branch("muon_isGood_TrackerMuonArbitrated", &_muon_isGood_TrackerMuonArbitrated, "muon_isGood_TrackerMuonArbitrated/O");
1082     b_muon_isGood_AllArbitrated = _tree -> Branch("muon_isGood_AllArbitrated", &_muon_isGood_AllArbitrated, "muon_isGood_AllArbitrated/O");
1083     b_muon_isGood_GlobalMuonPromptTight = _tree -> Branch("muon_isGood_GlobalMuonPromptTight", &_muon_isGood_GlobalMuonPromptTight, "muon_isGood_GlobalMuonPromptTight/O");
1084     b_muon_isGood_TMLastStationLoose = _tree -> Branch("muon_isGood_TMLastStationLoose", &_muon_isGood_TMLastStationLoose, "muon_isGood_TMLastStationLoose/O");
1085     b_muon_isGood_TMLastStationTight = _tree -> Branch("muon_isGood_TMLastStationTight", &_muon_isGood_TMLastStationTight, "muon_isGood_TMLastStationTight/O");
1086     b_muon_isGood_TM2DCompatibilityLoose = _tree -> Branch("muon_isGood_TM2DCompatibilityLoose", &_muon_isGood_TM2DCompatibilityLoose, "muon_isGood_TM2DCompatibilityLoose/O");
1087     b_muon_isGood_TM2DCompatibilityTight = _tree -> Branch("muon_isGood_TM2DCompatibilityTight", &_muon_isGood_TM2DCompatibilityTight, "muon_isGood_TM2DCompatibilityTight/O");
1088     b_muon_isGood_TMOneStationLoose = _tree -> Branch("muon_isGood_TMOneStationLoose", &_muon_isGood_TMOneStationLoose, "muon_isGood_TMOneStationLoose/O");
1089     b_muon_isGood_TMOneStationTight = _tree -> Branch("muon_isGood_TMOneStationTight", &_muon_isGood_TMOneStationTight, "muon_isGood_TMOneStationTight/O");
1090     b_muon_isGood_TMLastStationOptimizedLowPtLoose = _tree -> Branch("muon_isGood_TMLastStationOptimizedLowPtLoose", &_muon_isGood_TMLastStationOptimizedLowPtLoose, "muon_isGood_TMLastStationOptimizedLowPtLoose/O");
1091     b_muon_isGood_TMLastStationOptimizedLowPtTight = _tree -> Branch("muon_isGood_TMLastStationOptimizedLowPtTight", &_muon_isGood_TMLastStationOptimizedLowPtTight, "muon_isGood_TMLastStationOptimizedLowPtTight/O");
1092 kukartse 1.13 //
1093     //_____ set behavior of the main event counter ________________________
1094     //
1095 kukartse 1.1 eventCounter . setPrintCount(true);
1096 kukartse 1.11 eventCounter . setNewLine(true);
1097 kukartse 1.1 eventCounter . setMessage("Events processed: ");
1098     eventCounter . setDivider(100);
1099     }
1100    
1101     void TtLJetsAnalyzer::endJob() {
1102 kukartse 1.13 edm::LogInfo("TtLJetsAnalyzer") << " endJob(): " << selectedEvents.getCount() << " out of " << eventCounter.getCount() << " passed the selection" << endl;
1103     //
1104 kukartse 1.20 delete _pdf_weights;
1105     //
1106 kukartse 1.17 delete _e_dist;
1107     delete _e_dcot;
1108     //
1109 kukartse 1.13 // _____ b tagging ____________________________________________________
1110     //
1111 kukartse 1.7 delete _b_tagger_label;
1112     delete _b_tagger_discr;
1113 kukartse 1.11 delete _jet_pt;
1114     delete _jet_pz;
1115     delete _jet_eta;
1116     delete _jet_phi;
1117     delete _jet_et;
1118     delete _jet_energy;
1119     delete _jet_flavor;
1120 kukartse 1.12 //
1121     delete _muon_pt;
1122     delete _muon_pz;
1123     delete _muon_eta;
1124     delete _muon_phi;
1125     delete _muon_et;
1126     delete _muon_energy;
1127     delete _muon_flavor;
1128     //
1129     delete _electron_pt;
1130     delete _electron_pz;
1131     delete _electron_eta;
1132     delete _electron_phi;
1133     delete _electron_et;
1134     delete _electron_energy;
1135     delete _electron_flavor;
1136 kukartse 1.1 }
1137 kukartse 1.17
1138     //
1139     //_____ helper method for identifying elelctrons from conversions _______
1140     // (thanks to Puneeth Kalavase for the code)
1141     //
1142     pair<float, float>
1143     TtLJetsAnalyzer::getConversionInfo(const pat::Electron & el,
1144     const reco::Track & track,
1145     const reco::BeamSpot::Point _bs,
1146     float bField){
1147    
1148     double trk2_d0 = -(track.dxy(_bs));
1149     double el_d0 = -(el.gsfTrack()->dxy(_bs));
1150    
1151     double elCurvature = -0.3*bField*(el.charge()/el.pt())/100.;
1152     double rEl = fabs(1./elCurvature);
1153     double xEl = (1./elCurvature - el_d0)*cos(el.phi());
1154     double yEl = (1./elCurvature - el_d0)*sin(el.phi());
1155    
1156     double tk2Curvature = -0.3*bField*(track.charge()/track.pt())/100.;
1157     double rTk2 = fabs(1./tk2Curvature);
1158     double xTk2 = (1./tk2Curvature - trk2_d0)*cos(track.phi());
1159     double yTk2 = (1./tk2Curvature - trk2_d0)*sin(track.phi());
1160    
1161     double dist = sqrt(pow(xEl-xTk2, 2) + pow(yEl-yTk2 , 2));
1162     dist = dist - (rEl + rTk2);
1163    
1164     double dcot = 1/tan(el.theta()) - 1/tan(track.theta());
1165    
1166     return make_pair(dist, dcot);
1167     }
1168    
1169    
1170    
1171     //
1172     //_____ identify electrons that come from photon conversion _____________
1173     // (thanks to Francis Bostock for the code)
1174     //
1175     bool TtLJetsAnalyzer::ConversionAlgo(const pat::Electron& e, edm::Handle<edm::View<reco::Track> > track_h){
1176    
1177     //create pointer to track collection
1178     //std::string tracksInputTag = "generalTracks";
1179     //Handle<edm::View<reco::Track> > track_h;
1180     //iEvent.getByLabel(tracksInputTag, track_h);
1181    
1182     edm::View<reco::Track>::const_iterator tracks_end = track_h->end();
1183    
1184    
1185     int trk1;
1186     int trk2;
1187    
1188     bool isConversion = false;
1189    
1190     //first loop over the tracks
1191     trk1 = -1;
1192     for(edm::View<reco::Track>::const_iterator tk_it = track_h->begin();
1193     tk_it != tracks_end; ++tk_it) {
1194     trk1++;
1195     double EleTrackDelR = DelRTrackEle( e, (*track_h)[trk1] );
1196    
1197     //if the first track is far away from the electron, reject. This is the track we are trying
1198     //to loosely match to the electron.
1199    
1200     if(EleTrackDelR > _e_track_dr) continue;
1201    
1202     double tk1Curvature = -0.3*_bfield*tk_it->charge()/( 100*( tk_it->pt() ) );
1203     double tk1r = fabs(1/tk1Curvature);
1204     //-0.3 is a normalization constant to take account of the different units of each quantity
1205    
1206    
1207     double vx = tk_it->vx();
1208     double vy = tk_it->vy();
1209     double phi = tk_it->phi();
1210     double d0 = - ( -vx*sin(phi) + vy*cos(phi) );
1211    
1212     double tk1x = ((1/tk1Curvature) - d0)*cos(phi);
1213     double tk1y = ((1/tk1Curvature) - d0)*sin(phi);
1214    
1215     //second loop over the tracks
1216     trk2=-1;
1217     for (edm::View<reco::Track>::const_iterator tk_it2 = track_h->begin();
1218     tk_it2 != tracks_end; ++tk_it2) {
1219     trk2++;
1220     if(trk2 == trk1) continue;
1221    
1222    
1223     //Uncomment the following line to restrict position of the second track wrt the electron.
1224     //Only real need to do so is to help reduce the signal loss
1225    
1226     //if(DelRTrackEle( e, (*track_h)[trk2] ) > 0.5 ) continue;
1227    
1228    
1229    
1230    
1231     //The tracks should have opposite charges, so skip to next
1232     //track if they have the same charge
1233     if(tk_it->charge()*tk_it2->charge() > 0.0) continue;
1234    
1235    
1236     double tk2Curvature = -0.3*_bfield*tk_it2->charge()/( 100*( tk_it2->pt() ) );
1237     double tk2r = fabs(1/tk2Curvature);
1238    
1239     double vx2 = tk_it2->vx();
1240     double vy2 = tk_it2->vy();
1241     double phi2 = tk_it2->phi();
1242     double d02 = - ( -vx2*sin(phi2) + vy2*cos(phi2) );
1243    
1244     double tk2x = ((1/tk2Curvature) - d02)*cos(phi2);
1245     double tk2y = ((1/tk2Curvature) - d02)*sin(phi2);
1246    
1247    
1248     double distmag = (tk2x - tk1x)*(tk2x -tk1x) + (tk2y -tk1y)*(tk2y-tk1y);
1249     distmag = sqrt(distmag);
1250     double dist = distmag-(tk1r+tk2r);
1251     double dcot = 1/tan(tk_it->theta()) - 1/tan(tk_it2->theta());
1252    
1253     //alter the following cut values as appropriate to your analysis
1254     if( dist > _dist_min && dist < _dist_max && fabs(dcot) < _abs_dcot_max)
1255     {
1256     //edm::LogInfo("Demo") <<"Found a Conversion!";
1257     isConversion = true;
1258     break;
1259     }
1260     }//2nd track loop
1261     if(isConversion) break;
1262     }//1st track loop
1263    
1264     return isConversion;
1265     }
1266    
1267    
1268     //
1269     //_____ Function to calculate deltaR between the electron and track _____
1270     // (thanks to Francis Bostock for the code)
1271     //
1272     double TtLJetsAnalyzer::DelRTrackEle(const pat::Electron& e,const reco::Track& tk)
1273     {
1274     double deta = tk.eta()-e.eta();
1275     double dphi = tk.phi() - e.phi();
1276     while(dphi > M_PI) dphi -= 2*M_PI;
1277     while(dphi <= -M_PI) dphi += 2*M_PI;
1278     double deltar = sqrt(deta*deta + dphi*dphi);
1279     return deltar;
1280     }
1281    
1282    
1283    
1284 kukartse 1.13 //
1285     //_____ this is now obsolete, done in /plugins section
1286     //
1287 kukartse 1.1 //define this as a plug-in
1288 kukartse 1.13 //DEFINE_FWK_MODULE(TtLJetsAnalyzer);