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);
|