ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.32
Committed: Tue May 31 16:27:55 2011 UTC (13 years, 11 months ago) by agilbert
Content type: text/plain
Branch: MAIN
CVS Tags: v00-05-03
Changes since 1.31: +8 -15 lines
Log Message:
Several changes to be ready for 42X data processing.

File Contents

# Content
1 #include "DataFormats/Common/interface/Handle.h"
2 #include "DataFormats/Common/interface/TriggerResults.h"
3 #include "DataFormats/Common/interface/HLTenums.h"
4 #include "DataFormats/Common/interface/ValueMap.h"
5
6 #include "DataFormats/Candidate/interface/Candidate.h"
7 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
8 #include "DataFormats/Scalers/interface/DcsStatus.h"
9 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
10 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
11
12 #include "DataFormats/MuonReco/interface/Muon.h"
13 #include "DataFormats/MuonReco/interface/MuonFwd.h"
14 #include "DataFormats/MuonReco/interface/MuonSelectors.h"
15 #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
16 #include "DataFormats/MuonReco/interface/MuonIsolation.h"
17 #include "DataFormats/MuonReco/interface/MuonEnergy.h"
18 #include "DataFormats/MuonReco/interface/MuonTime.h"
19 #include "DataFormats/MuonReco/interface/MuonQuality.h"
20
21 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
22 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h"
23 #include "DataFormats/RecoCandidate/interface/IsoDepositFwd.h"
24
25
26 #include "DataFormats/VertexReco/interface/Vertex.h"
27 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
28 #include "DataFormats/TrackReco/interface/Track.h"
29 #include "DataFormats/TrackReco/interface/TrackFwd.h"
30
31 #include "DataFormats/PatCandidates/interface/Lepton.h"
32 #include "DataFormats/PatCandidates/interface/Muon.h"
33 #include "DataFormats/PatCandidates/interface/Electron.h"
34 #include "DataFormats/PatCandidates/interface/Tau.h"
35 #include "DataFormats/PatCandidates/interface/Jet.h"
36 #include "DataFormats/PatCandidates/interface/JetCorrFactors.h"
37 #include "DataFormats/PatCandidates/interface/MET.h"
38
39 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
40 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
41
42 #include "FWCore/ServiceRegistry/interface/Service.h"
43 #include "FWCore/Framework/interface/Run.h"
44 #include "FWCore/Framework/interface/ESHandle.h"
45 #include "CommonTools/UtilAlgos/interface/TFileService.h"
46
47 #include "PhysicsTools/SelectorUtils/interface/SimpleCutBasedElectronIDSelectionFunctor.h"
48 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
49 #include "MagneticField/Engine/interface/MagneticField.h"
50
51 #include "UserCode/HbbAnalysis/interface/Electron.hh"
52 #include "UserCode/HbbAnalysis/interface/Muon.hh"
53 #include "UserCode/HbbAnalysis/interface/Tau.hh"
54 #include "UserCode/HbbAnalysis/interface/Jet.hh"
55 #include "UserCode/HbbAnalysis/interface/Met.hh"
56 #include "UserCode/HbbAnalysis/interface/Trigger.hh"
57 #include "UserCode/HbbAnalysis/interface/Vertex.hh"
58 #include "UserCode/HbbAnalysis/interface/L1Object.hh"
59 #include "UserCode/HbbAnalysis/interface/HLTObject.hh"
60
61 //AJG
62 #include "DataFormats/JetReco/interface/JPTJetCollection.h"
63 #include "DataFormats/JetReco/interface/JPTJet.h"
64 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
65 #include "SimDataFormats/Vertex/interface/SimVertex.h"
66
67 #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h"
68
69 #include "UserCode/HbbAnalysis/plugins/HbbTreeMaker.hh"
70
71 using namespace HbbAnalysis;
72
73 HbbTreeMaker::HbbTreeMaker(const edm::ParameterSet & pset):
74 debug_(pset.getParameter<int>("DEBUG")),
75 processData_(false),
76 flavour_(pset.getParameter<unsigned int>("JetFlavour")),
77 doGen_(pset.getParameter<bool>("DOGEN")),
78 genParticleSrc_(pset.getParameter<edm::InputTag>("GenParticles")),
79 trackSrc_(pset.getParameter<edm::InputTag>("Tracks")),
80 dcsSrc_(pset.getParameter<edm::InputTag>("DCSInfo")),
81 electronSrc_(pset.getParameter<edm::InputTag>("Electrons")),
82 muonSrc_(pset.getParameter<edm::InputTag>("Muons")),
83 caloTauSrc_(pset.getParameter<edm::InputTag>("CaloTaus")),
84 pfTauSrc_(pset.getParameter<edm::InputTag>("PFTaus")),
85 caloJetSrc_(pset.getParameter<edm::InputTag>("CaloJets")),
86 jptJetSrc_(pset.getParameter<edm::InputTag>("JPTJets")),
87 ak7JetSrc_(pset.getParameter<edm::InputTag>("AK7Jets")),
88 pfJetSrc_(pset.getParameter<edm::InputTag>("PFJets")),
89 caloMetSrc_(pset.getParameter<edm::InputTag>("CaloMET")),
90 tcMetSrc_(pset.getParameter<edm::InputTag>("TCMET")),
91 pfMetSrc_(pset.getParameter<edm::InputTag>("PFMET")),
92 //pairSrc_(pset.getParameter<edm::InputTag>("Pair")),
93 //mmPairSrc_(pset.getParameter<edm::InputTag>("MuMuPair")),
94 //etPairSrc_(pset.getParameter<edm::InputTag>("ETauPair")),
95 //mtPairSrc_(pset.getParameter<edm::InputTag>("MuTauPair")),
96 vertexSrc_(pset.getParameter<edm::InputTag>("Vertex")),
97 triggerSrc_(pset.getParameter<edm::InputTag>("Trigger")),
98 hltPaths_(pset.getParameter<std::vector<std::string> >("HLTPaths")),
99 l1CenJetSrc_(pset.getParameter<edm::InputTag>("L1CenJet")),
100 l1TauJetSrc_(pset.getParameter<edm::InputTag>("L1TauJet")),
101 l1FwdJetSrc_(pset.getParameter<edm::InputTag>("L1FwdJet")),
102 hltSummarySrc_(pset.getParameter<edm::InputTag>("HLTSummary")),
103 event_(0),
104 tree_(0)
105 //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
106 {//constructor
107
108 std::string JEC_PATH("CondFormats/JetMETObjects/data/");
109 edm::FileInPath fipCalo(JEC_PATH+"Jec10V3_Uncertainty_AK5Calo.txt");
110 edm::FileInPath fipPF(JEC_PATH+"Jec10V3_Uncertainty_AK5PF.txt");
111 edm::FileInPath fipJPT(JEC_PATH+"Jec10V3_Uncertainty_AK5JPT.txt");
112 jecUncCalo = new JetCorrectionUncertainty(fipCalo.fullPath());
113 jecUncPF = new JetCorrectionUncertainty(fipPF.fullPath());
114 jecUncJPT = new JetCorrectionUncertainty(fipJPT.fullPath());
115
116 }//constructor
117
118 HbbTreeMaker::~HbbTreeMaker()
119 {//destructor
120 delete jecUncCalo;
121 delete jecUncPF;
122 delete jecUncJPT;
123
124 }//destructor
125
126
127
128 void HbbTreeMaker::beginJob(){//beginJob
129
130
131 edm::Service<TFileService> lFileService;
132
133 TFileDirectory lDir = lFileService->mkdir("HbbAnalysis");
134
135 tree_ = lDir.make<TTree>("Tree","Tree");
136 tree_->Branch("HbbEvent","HbbAnalysis::HbbEvent",&event_);
137 event_ = new HbbEvent();
138
139 if (debug_) std::cout << "Initialising JetFlavour : " << std::endl;
140
141 lDir = lFileService->mkdir("JetFlavours");
142 jetFlav_.Initialise(lDir, debug_, flavour_);
143
144
145 }//beginJob
146
147 void HbbTreeMaker::endJob(){//endJob
148 if (!processData_) jetFlav_.printSummary();
149
150 //tree_->Write();
151 //delete tree_;
152 //delete event_;
153
154 }//endJob
155
156 void HbbTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
157
158 //dumpContent(aEvt,"","MuTauPAT");
159 if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
160
161
162 static bool firstEvent = true;
163
164 event_->Clear();
165 event_->event(aEvt.id().event());
166 processData_ = aEvt.isRealData();
167
168 event_->run(aEvt.run());
169 event_->lumiBlock(aEvt.luminosityBlock());
170 event_->isRealData(aEvt.isRealData());
171 event_->bx(aEvt.bunchCrossing());
172
173 edm::Handle<reco::BeamSpot> lBeamSpot;
174 try {
175 aEvt.getByLabel(edm::InputTag("offlineBeamSpot"), lBeamSpot);
176 } catch(cms::Exception& e) {
177 std::cout<< "AMM: No beam spot found. Exception : " << e.what() << "." << std::endl;
178 }
179 HbbBeamSpot(lBeamSpot,event_->beamSpot());
180
181 //AJG - This will only work on RECO sample
182 /*
183 std::cout << "Beamspot = (" << lBeamSpot->x0() << "," << lBeamSpot->y0() << "," << lBeamSpot->z0() << ")" << std::endl;
184
185 edm::Handle<edm::SimVertexContainer> simVertexCollection;
186 aEvt.getByLabel("g4SimHits", simVertexCollection);
187 const edm::SimVertexContainer simVC = *(simVertexCollection.product());
188 std::cout << "SimVertexContainer size = " << simVC.size() << std::endl;
189 std::cout << "SimVertex[0] = (" << simVC.at(0).position().x() << ","
190 << simVC.at(0).position().y() << ","
191 << simVC.at(0).position().z() << ")" << std::endl;
192 */
193
194 if (!processData_) {
195 edm::Handle<edm::HepMCProduct> mcProd;
196 edm::Handle<GenRunInfoProduct> lRunProd;
197 try {
198 aEvt.getByLabel("generator", mcProd );
199 } catch(cms::Exception& e) {
200 std::cout << "AMM: Collection HepMCProduct not available! Exception : " << e.what() << ". " << std::endl;
201 }
202 try {
203 aEvt.getRun().getByLabel("generator",lRunProd);
204 } catch(cms::Exception& e) {
205 std::cout << "AMM: Collection GenInfoProduct not available! Exception : " << e.what() << ". " << std::endl;
206 }
207
208 //HbbGenInfo(mcProd,lRunProd);
209 }
210
211 edm::Handle<reco::GenParticleCollection> lGenParticles;
212 try {
213 aEvt.getByLabel(genParticleSrc_,lGenParticles);
214 if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
215 } catch(cms::Exception& e) {
216 if (!processData_) std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
217 }
218
219 if (doGen_ && !processData_) HbbParticles(lGenParticles,event_->particles());
220
221 unsigned int lNPartons = 0;
222 if (!processData_) lNPartons = jetFlav_.fillPartons(lGenParticles);
223
224 if (debug_ && !processData_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
225
226
227 edm::Handle<std::vector<reco::Vertex> > lRecoVertices;
228 try {
229 aEvt.getByLabel(vertexSrc_, lRecoVertices);
230 if (!lRecoVertices.isValid()){
231 edm::LogInfo("ERROR")<< "Error! Can't get vertex by label. ";
232 }
233 if (debug_) std::cout << "** vertexcollection = " << lRecoVertices->size() << " elements." << std::endl;
234 } catch(cms::Exception& e) {
235 std::cout << "AMM: Collection " << vertexSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
236 }
237
238 HbbVertices(lRecoVertices,event_->vertices());
239
240 edm::Handle<std::vector<pat::Electron> > lElectronCollection;
241
242 try {
243 aEvt.getByLabel(electronSrc_,lElectronCollection);
244 if (!lElectronCollection.isValid()){
245 edm::LogInfo("ERROR")<< "Error! Can't get electron by label. ";
246 }
247 if (debug_) std::cout << "** electroncollection = " << lElectronCollection->size() << " elements." << std::endl;
248 } catch(cms::Exception& e) {
249 std::cout << "AMM: Collection " << electronSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
250 }
251
252 HbbElectrons(lElectronCollection,event_->electrons());
253
254 edm::Handle<std::vector<pat::Muon> > lMuonCollection;
255
256 try {
257 aEvt.getByLabel(muonSrc_,lMuonCollection);
258 if (!lMuonCollection.isValid()){
259 edm::LogInfo("ERROR")<< "Error! Can't get muon by label. ";
260 }
261 if (debug_) std::cout << "** muoncollection = " << lMuonCollection->size() << " elements." << std::endl;
262 } catch(cms::Exception& e) {
263 std::cout << "AMM: Collection " << muonSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
264 }
265
266 HbbMuons(lMuonCollection,lRecoVertices,lBeamSpot,event_->muons());
267
268
269 if (!( caloTauSrc_.label()=="" && caloTauSrc_.instance()=="" )) {
270 edm::Handle<std::vector<pat::Tau> > lTauCollection;
271
272 try {
273 aEvt.getByLabel(caloTauSrc_,lTauCollection);
274 if (!lTauCollection.isValid()){
275 edm::LogInfo("ERROR")<< "Error! Can't get caloTau by label. ";
276 }
277 if (debug_) std::cout << "** caloTaucollection = " << lTauCollection->size() << " elements." << std::endl;
278 } catch(cms::Exception& e) {
279 std::cout << "AMM: Collection " << caloTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
280 }
281
282 HbbTaus(lTauCollection,lRecoVertices,event_->caloTaus());
283 }
284
285 edm::Handle<std::vector<pat::Tau> > lPFTauCollection;
286
287 try {
288 aEvt.getByLabel(pfTauSrc_,lPFTauCollection);
289 if (!lPFTauCollection.isValid()){
290 edm::LogInfo("ERROR")<< "Error! Can't get pfTau by label. ";
291 }
292 if (debug_) std::cout << "** pfTaucollection = " << lPFTauCollection->size() << " elements." << std::endl;
293 } catch(cms::Exception& e) {
294 std::cout << "AMM: Collection " << pfTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
295 }
296
297 HbbTaus(lPFTauCollection,lRecoVertices,event_->pfTaus());
298
299 edm::Handle<std::vector<pat::Jet> > lCaloJetCollection;
300
301 try {
302 aEvt.getByLabel(caloJetSrc_,lCaloJetCollection);
303 if (!lCaloJetCollection.isValid()){
304 edm::LogInfo("ERROR")<< "Error! Can't get caloJets by label. ";
305 }
306 if (debug_) std::cout << "** caloJetcollection = " << lCaloJetCollection->size() << " elements." << std::endl;
307 } catch(cms::Exception& e) {
308 std::cout << "AMM: Collection " << caloJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
309 }
310
311 HbbJets(lCaloJetCollection,jetFlav_,lGenParticles,event_->caloJets());
312
313 //AJG - Process reco JPT Jet Corrections:
314 //This section should be uncommented for testing purposes
315
316 /*
317 edm::Handle<reco::JPTJetCollection > lJptRL2L3RESJetCollection;
318 edm::Handle<reco::JPTJetCollection > lJptRL1L2L3RESJetCollection;
319
320 edm::Handle<reco::JPTJetCollection > lJptRRAWJetCollection;
321 try {
322 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
323 if (!lJptRRAWJetCollection.isValid()){
324 edm::LogInfo("ERROR")<< "Error! Can't get JetPlusZSPCorJetAntiKt5 by label. ";
325 }
326 if (debug_) std::cout << "** jetPlusTrackZSPCorJetAntiKt5 = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
327 } catch(cms::Exception& e) {
328 std::cout << "AJG: Collection not available! Exception : " << e.what() << ". " << std::endl;
329 }
330
331 try {
332 aEvt.getByLabel("ak5JPTJetsL2L3Residual",lJptRL2L3RESJetCollection);
333 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
334 aEvt.getByLabel("ak5JPTJetsL1L2L3Residual",lJptRL1L2L3RESJetCollection);
335 if (!lJptRRAWJetCollection.isValid()){
336 edm::LogInfo("ERROR")<< "Error! Can't get jptRecoJets by label. ";
337 }
338 if (debug_) std::cout << "** jptRecoJetcollection = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
339 } catch(cms::Exception& e) {
340 std::cout << "AJG: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
341 }
342
343
344 for(reco::JPTJetCollection::const_iterator jptjet = lJptRRAWJetCollection->begin(); jptjet != lJptRRAWJetCollection->end(); ++jptjet ) {
345
346 std::cout << "pT = " << jptjet->pt() << std::endl;
347
348 reco::TrackRefVector tpionsInVInC = jptjet->getPionsInVertexInCalo();
349 std::cout << "Pion Track Count (reco) = " << tpionsInVInC.size() << std::endl;
350 }
351
352 reco::JPTJetCollection::const_iterator jptRAWjet = lJptRRAWJetCollection->begin();
353 reco::JPTJetCollection::const_iterator jptL2L3RESjet = lJptRL2L3RESJetCollection->begin();
354 reco::JPTJetCollection::const_iterator jptL1L2L3RESjet = lJptRL1L2L3RESJetCollection->begin();
355 std::cout << "pT RAW = " << jptRAWjet->pt() << std::endl;
356 std::cout << "pT L2L3RES = " << jptL2L3RESjet->pt() << std::endl;
357 std::cout << "pT L1L2L3RES = " << jptL1L2L3RESjet->pt() << std::endl;
358 */
359
360
361
362 edm::Handle<std::vector<pat::Jet> > lJptJetCollection;
363
364 try {
365 aEvt.getByLabel(jptJetSrc_,lJptJetCollection);
366 if (!lJptJetCollection.isValid()){
367 edm::LogInfo("ERROR")<< "Error! Can't get jptJets by label. ";
368 }
369 if (debug_) std::cout << "** jptJetcollection = " << lJptJetCollection->size() << " elements." << std::endl;
370 } catch(cms::Exception& e) {
371 std::cout << "AMM: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
372 }
373
374 //std::cout << "Processing JPT jets:" << std::endl;
375 HbbJets(lJptJetCollection,jetFlav_,lGenParticles,event_->jptJets());
376
377 edm::Handle<std::vector<pat::Jet> > lAk7JetCollection;
378
379 try {
380 aEvt.getByLabel(ak7JetSrc_,lAk7JetCollection);
381 if (!lAk7JetCollection.isValid()){
382 edm::LogInfo("ERROR")<< "Error! Can't get ak7Jets by label. ";
383 }
384 if (debug_) std::cout << "** ak7Jetcollection = " << lAk7JetCollection->size() << " elements." << std::endl;
385 } catch(cms::Exception& e) {
386 std::cout << "AMM: Collection " << ak7JetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
387 }
388
389 //std::cout << "Processing JPT jets:" << std::endl;
390 HbbJets(lAk7JetCollection,jetFlav_,lGenParticles,event_->ak7Jets());
391
392 edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
393
394 try {
395 aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
396 if (!lPfJetCollection.isValid()){
397 edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
398 }
399 if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
400 } catch(cms::Exception& e) {
401 std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
402 }
403
404 //std::cout << "Processing PF jets:" << std::endl;
405 HbbJets(lPfJetCollection,jetFlav_,lGenParticles,event_->pfJets());
406
407 edm::Handle<std::vector<pat::MET> > lCaloMetCol;
408
409 try {
410 aEvt.getByLabel(caloMetSrc_,lCaloMetCol);
411 if (!lCaloMetCol.isValid()){
412 edm::LogInfo("ERROR")<< "Error! Can't get caloMet by label. ";
413 }
414 if (debug_) std::cout << "** caloMet = " << lCaloMetCol->size() << " elements." << std::endl;
415 } catch(cms::Exception& e) {
416 std::cout << "AMM: Collection " << caloMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
417 }
418
419 HbbMet(lCaloMetCol,event_->caloMet());
420
421 edm::Handle<std::vector<pat::MET> > lTcMetCol;
422
423 try {
424 aEvt.getByLabel(tcMetSrc_,lTcMetCol);
425 if (!lTcMetCol.isValid()){
426 edm::LogInfo("ERROR")<< "Error! Can't get tcMet by label. ";
427 }
428 if (debug_) std::cout << "** tcMet = " << lTcMetCol->size() << " elements." << std::endl;
429 } catch(cms::Exception& e) {
430 std::cout << "AMM: Collection " << tcMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
431 }
432
433 HbbMet(lTcMetCol,event_->tcMet());
434
435 edm::Handle<std::vector<pat::MET> > lPfMetCol;
436
437 try {
438 aEvt.getByLabel(pfMetSrc_,lPfMetCol);
439 if (!lPfMetCol.isValid()){
440 edm::LogInfo("ERROR")<< "Error! Can't get pfMet by label. ";
441 }
442 if (debug_) std::cout << "** pfMet = " << lPfMetCol->size() << " elements." << std::endl;
443 } catch(cms::Exception& e) {
444 std::cout << "AMM: Collection " << pfMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
445 }
446
447 HbbMet(lPfMetCol,event_->pfMet());
448
449
450
451 //triggers
452 edm::Handle<edm::TriggerResults> lTrigCol;
453 try {
454 aEvt.getByLabel(triggerSrc_,lTrigCol);
455 if (!lTrigCol.isValid()){
456 edm::LogInfo("ERROR")<< "Error! Can't get triggers by label. ";
457 }
458 if (debug_) std::cout << "** triggers = " << lTrigCol->size() << std::endl;
459 } catch(cms::Exception& e) {
460 std::cout << "AMM: Collection " << triggerSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
461 }
462 if (lTrigCol.isValid()) {
463 const edm::TriggerNames & lNames = aEvt.triggerNames(*lTrigCol);
464 HbbTrigger(lTrigCol,lNames,event_->triggers());
465 }
466
467 //L1 jet objects
468
469 edm::Handle<l1extra::L1JetParticleCollection> lCenJet;
470 edm::Handle<l1extra::L1JetParticleCollection> lFwdJet;
471 edm::Handle<l1extra::L1JetParticleCollection> lTauJet;
472 try {
473 aEvt.getByLabel(l1CenJetSrc_,lCenJet);
474 aEvt.getByLabel(l1TauJetSrc_,lTauJet);
475 aEvt.getByLabel(l1FwdJetSrc_,lFwdJet);
476 } catch(cms::Exception& e) {
477 std::cout << "AMM: L1 Collections " << l1CenJetSrc_ << ", " << l1TauJetSrc_ << ", " << l1FwdJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
478 }
479 if (lCenJet.isValid()) {
480 HbbL1Objects(lCenJet,event_->l1Jets(),1);
481 }
482 if (lTauJet.isValid()) {
483 HbbL1Objects(lTauJet,event_->l1Jets(),2);
484 }
485 if (lFwdJet.isValid()) {
486 HbbL1Objects(lFwdJet,event_->l1Jets(),3);
487 }
488
489
490 edm::Handle<trigger::TriggerEvent> lHltSummary;
491 try {
492 aEvt.getByLabel(hltSummarySrc_,lHltSummary);
493 } catch(cms::Exception& e) {
494 std::cout << "AMM: collection " << hltSummarySrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
495 }
496 if (lHltSummary.isValid()) {
497 HbbHLTObjects(lHltSummary,event_->hltObjects());
498 }
499
500
501
502 //event_->order();
503 tree_->Fill();
504 firstEvent = false;
505
506 }//analyze
507
508
509 void HbbTreeMaker::HbbBeamSpot(const edm::Handle<reco::BeamSpot> & aBeamSpot,
510 HbbAnalysis::BeamSpot & aBS)
511 {
512
513 if (aBeamSpot.isValid()) {
514 HbbAnalysis::BeamSpotVars lbs;
515 lbs.x0 = aBeamSpot->x0();
516 lbs.y0 = aBeamSpot->y0();
517 lbs.z0 = aBeamSpot->z0();
518 lbs.sigmaZ = aBeamSpot->sigmaZ();
519 lbs.BeamWidthX = aBeamSpot->BeamWidthX();
520 lbs.BeamWidthY = aBeamSpot->BeamWidthY();
521 lbs.x0Error = aBeamSpot->x0Error();
522 lbs.y0Error = aBeamSpot->y0Error();
523 lbs.z0Error = aBeamSpot->z0Error();
524 lbs.sigmaZ0Error = aBeamSpot->sigmaZ0Error();
525 lbs.BeamWidthXError = aBeamSpot->BeamWidthXError();
526 lbs.BeamWidthYError = aBeamSpot->BeamWidthYError();
527
528 aBS.bsVars(lbs);
529 }
530
531 }
532
533
534 void HbbTreeMaker::HbbElectrons(const edm::Handle<std::vector<pat::Electron> > & aCol,
535 std::vector<HbbAnalysis::Electron> & aVec)
536 {//HbbElectrons
537
538 if (aCol.isValid()){
539 if (aCol->size() > 0) {
540
541 unsigned int iEle = 0;
542 for (std::vector<pat::Electron>::const_iterator iter = aCol->begin();
543 iter != aCol->end();
544 ++iter,++iEle)
545 {
546 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
547 // get the track collection
548
549
550
551 // define your function for WPXX using relative or absolute isolations
552 SimpleCutBasedElectronIDSelectionFunctor patSeleR95(SimpleCutBasedElectronIDSelectionFunctor::relIso95);
553 SimpleCutBasedElectronIDSelectionFunctor patSeleR90(SimpleCutBasedElectronIDSelectionFunctor::relIso90);
554 SimpleCutBasedElectronIDSelectionFunctor patSeleR85(SimpleCutBasedElectronIDSelectionFunctor::relIso85);
555 SimpleCutBasedElectronIDSelectionFunctor patSeleR80(SimpleCutBasedElectronIDSelectionFunctor::relIso80);
556 SimpleCutBasedElectronIDSelectionFunctor patSeleR70(SimpleCutBasedElectronIDSelectionFunctor::relIso70);
557 SimpleCutBasedElectronIDSelectionFunctor patSeleR60(SimpleCutBasedElectronIDSelectionFunctor::relIso60);
558 SimpleCutBasedElectronIDSelectionFunctor patSeleC95(SimpleCutBasedElectronIDSelectionFunctor::cIso95);
559 SimpleCutBasedElectronIDSelectionFunctor patSeleC90(SimpleCutBasedElectronIDSelectionFunctor::cIso90);
560 SimpleCutBasedElectronIDSelectionFunctor patSeleC85(SimpleCutBasedElectronIDSelectionFunctor::cIso85);
561 SimpleCutBasedElectronIDSelectionFunctor patSeleC80(SimpleCutBasedElectronIDSelectionFunctor::cIso80);
562 SimpleCutBasedElectronIDSelectionFunctor patSeleC70(SimpleCutBasedElectronIDSelectionFunctor::cIso70);
563 SimpleCutBasedElectronIDSelectionFunctor patSeleC60(SimpleCutBasedElectronIDSelectionFunctor::cIso60);
564
565
566 HbbAnalysis::GenVars lGen;
567 if (!processData_ && (*iter).genLepton()){
568 lGen.valid = true;
569 lGen.E = (*iter).genLepton()->energy();
570 lGen.pT = (*iter).genLepton()->pt();
571 lGen.eta = (*iter).genLepton()->eta();
572 lGen.y = (*iter).genLepton()->y();
573 lGen.phi = (*iter).genLepton()->phi();
574 lGen.charge = (*iter).genLepton()->charge();
575 lGen.pdgId = (*iter).genLepton()->pdgId();
576 lGen.status = (*iter).genLepton()->status();
577 lGen.mass = (*iter).genLepton()->mass();
578 lGen.vx = (*iter).genLepton()->vx();
579 lGen.vy = (*iter).genLepton()->vy();
580 lGen.vz = (*iter).genLepton()->vz();
581 }
582 else {
583 lGen.valid = false;
584 lGen.E = 0;
585 lGen.pT = 0;
586 lGen.eta = 0;
587 lGen.y = 0;
588 lGen.phi = 0;
589 lGen.charge = 0;
590 lGen.pdgId = 0;
591 lGen.status = 0;
592 lGen.mass = 0;
593 lGen.vx = 0;
594 lGen.vy = 0;
595 lGen.vz = 0;
596 }
597
598 HbbAnalysis::BaseVars lReco;
599 lReco.E = (*iter).energy();
600 lReco.pT = (*iter).pt();
601 lReco.eta = (*iter).eta();
602 lReco.y = (*iter).y();
603 lReco.phi = (*iter).phi();
604 lReco.charge = (*iter).charge();
605 lReco.vx = (*iter).vx();
606 lReco.vy = (*iter).vy();
607 lReco.vz = (*iter).vz();
608 lReco.hltMatch = (*iter).triggerObjectMatches().size();
609
610 HbbAnalysis::SCVars lSC;
611 lSC.sigmaEtaEta = (*iter).scSigmaEtaEta();
612 lSC.sigmaIEtaIEta = (*iter).scSigmaIEtaIEta();
613 lSC.e1x5 = (*iter).scE1x5();
614 lSC.e2x5Max = (*iter).scE2x5Max();
615 lSC.e5x5 = (*iter).scE5x5();
616 lSC.eOverP = (*iter).eSuperClusterOverP();
617
618 HbbAnalysis::EleIsoVars lIso;
619 lIso.calo = (*iter).caloIso();
620 lIso.track = (*iter).trackIso();
621 lIso.ecal = (*iter).ecalIso();
622 lIso.hcal = (*iter).hcalIso();
623
624 HbbAnalysis::EleIDVars lID;
625 lID.idAndIso =
626 (patSeleR95(*iter)<<11) | (patSeleR90(*iter)<<10) |
627 (patSeleR85(*iter)<<9) | (patSeleR80(*iter)<<8) |
628 (patSeleR70(*iter)<<7) | (patSeleR60(*iter)<<6) |
629 (patSeleC95(*iter)<<5) | (patSeleC90(*iter)<<4) |
630 (patSeleC85(*iter)<<3) | (patSeleC80(*iter)<<2) |
631 (patSeleC70(*iter)<<1) | (patSeleC60(*iter));
632 lID.electronIDs = (*iter).electronIDs();
633 lID.hOverE = (*iter).hadronicOverEm();
634 lID.deltaPhiIn = (*iter).deltaPhiSuperClusterTrackAtVtx();
635 lID.deltaEtaIn = (*iter).deltaEtaSuperClusterTrackAtVtx();
636 lID.ecalDrivenSeed = (*iter).ecalDrivenSeed();
637 lID.trackerDrivenSeed = (*iter).trackerDrivenSeed();
638 lID.dB = (*iter).dB();
639
640 HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
641 aVec.push_back(lObj);
642 }
643 }
644 }
645
646 }//HbbElectrons
647
648
649 void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
650 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
651 const edm::Handle<reco::BeamSpot> & aBeamSpot,
652 std::vector<HbbAnalysis::Muon> & aVec)
653 {//HbbMuons
654
655 if (aCol.isValid()){
656 if (aCol->size() > 0) {
657
658 unsigned int iEle = 0;
659 for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
660 iter != aCol->end();
661 ++iter,++iEle)
662 {
663 const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
664
665 //select only global and tracker muons
666 if (!recoMuon->isGlobalMuon() || !recoMuon->isTrackerMuon()) continue;
667
668 HbbAnalysis::GenVars lGen;
669 if (!processData_ && (*iter).genLepton()){
670 lGen.valid = true;
671 lGen.E = (*iter).genLepton()->energy();
672 lGen.pT = (*iter).genLepton()->pt();
673 lGen.eta = (*iter).genLepton()->eta();
674 lGen.y = (*iter).genLepton()->y();
675 lGen.phi = (*iter).genLepton()->phi();
676 lGen.charge = (*iter).genLepton()->charge();
677 lGen.pdgId = (*iter).genLepton()->pdgId();
678 lGen.status = (*iter).genLepton()->status();
679 lGen.mass = (*iter).genLepton()->mass();
680 lGen.vx = (*iter).genLepton()->vx();
681 lGen.vy = (*iter).genLepton()->vy();
682 lGen.vz = (*iter).genLepton()->vz();
683 }
684 else {
685 lGen.valid = false;
686 lGen.E = 0;
687 lGen.pT = 0;
688 lGen.eta = 0;
689 lGen.y = 0;
690 lGen.phi = 0;
691 lGen.charge = 0;
692 lGen.pdgId = 0;
693 lGen.status = 0;
694 lGen.mass = 0;
695 lGen.vx = 0;
696 lGen.vy = 0;
697 lGen.vz = 0;
698 }
699
700 HbbAnalysis::BaseVars lReco;
701 lReco.E = (*iter).energy();
702 lReco.pT = (*iter).pt();
703 lReco.eta = (*iter).eta();
704 lReco.y = (*iter).y();
705 lReco.phi = (*iter).phi();
706 lReco.charge = (*iter).charge();
707 lReco.vx = (*iter).vx();
708 lReco.vy = (*iter).vy();
709 lReco.vz = (*iter).vz();
710 lReco.hltMatch = (*iter).triggerObjectMatches().size();
711
712 HbbAnalysis::MuTrkVars lTrk;
713 reco::TrackRef glmuon = recoMuon->globalTrack();
714 reco::TrackRef tkmuon = recoMuon->innerTrack();
715
716 if ( glmuon.isAvailable() && glmuon.isNonnull() ) {
717 if (aBeamSpot.isValid()) {
718 lTrk.dxy = glmuon->dxy(aBeamSpot->position());
719 lTrk.dz = glmuon->dz(aBeamSpot->position());
720 }
721 else {
722 lTrk.dxy = 0;
723 lTrk.dz = 0;
724 }
725 lTrk.normalizedChi2 = glmuon->normalizedChi2();
726 lTrk.muonHits = glmuon->hitPattern().numberOfValidMuonHits();
727 lTrk.charge = glmuon->charge();
728 }
729 else {
730 lTrk.dxy = 0;
731 lTrk.dz = 0;
732 lTrk.normalizedChi2 = 0;
733 lTrk.muonHits = 0;
734 lTrk.charge = 0;
735 }
736 if ( tkmuon.isAvailable() && tkmuon.isNonnull() ) {
737 lTrk.trackerHits = tkmuon->hitPattern().numberOfValidTrackerHits();
738 lTrk.pixelHits = tkmuon->hitPattern().numberOfValidPixelHits();
739 }
740 else {
741 lTrk.trackerHits = 0;
742 lTrk.pixelHits = 0;
743 }
744
745 HbbAnalysis::MuIsoVars lIsoR03;
746 lIsoR03.sumPt = recoMuon->isolationR03().sumPt;
747 lIsoR03.emEt = recoMuon->isolationR03().emEt;
748 lIsoR03.hadEt = recoMuon->isolationR03().hadEt;
749 lIsoR03.nTracks = recoMuon->isolationR03().nTracks;
750 lIsoR03.nJets = recoMuon->isolationR03().nJets;
751
752 HbbAnalysis::MuIsoVars lIsoR05;
753 lIsoR05.sumPt = recoMuon->isolationR05().sumPt;
754 lIsoR05.emEt = recoMuon->isolationR05().emEt;
755 lIsoR05.hadEt = recoMuon->isolationR05().hadEt;
756 lIsoR05.nTracks = recoMuon->isolationR05().nTracks;
757 lIsoR05.nJets = recoMuon->isolationR05().nJets;
758
759 HbbAnalysis::MuIDVars lID;
760 //if (recoMuon->isGlobalMuon()) lID.type = 1;
761 //else if (recoMuon->isTrackerMuon()) lID.type = 2;
762 //else if (recoMuon->isStandAloneMuon()) lID.type = 3;
763 //else if (recoMuon->isCaloMuon()) lID.type = 4;
764 //else lID.type = 0;
765 lID.type = (recoMuon->isCaloMuon()<<3) | (recoMuon->isStandAloneMuon()<<2) | (recoMuon->isTrackerMuon()<<1) | recoMuon->isGlobalMuon();
766
767 if (muon::isGoodMuon(*recoMuon,muon::AllGlobalMuons)) lID.ids.push_back(1);
768 if (muon::isGoodMuon(*recoMuon,muon::AllStandAloneMuons)) lID.ids.push_back(2);
769 if (muon::isGoodMuon(*recoMuon,muon::AllTrackerMuons)) lID.ids.push_back(3);
770 if (muon::isGoodMuon(*recoMuon,muon::TrackerMuonArbitrated)) lID.ids.push_back(4);
771 if (muon::isGoodMuon(*recoMuon,muon::AllArbitrated)) lID.ids.push_back(5);
772 if (muon::isGoodMuon(*recoMuon,muon::GlobalMuonPromptTight)) lID.ids.push_back(6);
773 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationLoose)) lID.ids.push_back(7);
774 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationTight)) lID.ids.push_back(8);
775 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityLoose)) lID.ids.push_back(9);
776 if (muon::isGoodMuon(*recoMuon,muon::TM2DCompatibilityTight)) lID.ids.push_back(10);
777 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationLoose)) lID.ids.push_back(11);
778 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationTight)) lID.ids.push_back(12);
779 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtLoose)) lID.ids.push_back(13);
780 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedLowPtTight)) lID.ids.push_back(14);
781 if (muon::isGoodMuon(*recoMuon,muon::GMTkChiCompatibility)) lID.ids.push_back(15);
782 if (muon::isGoodMuon(*recoMuon,muon::GMStaChiCompatibility)) lID.ids.push_back(16);
783 if (muon::isGoodMuon(*recoMuon,muon::GMTkKinkTight)) lID.ids.push_back(17);
784 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngLoose)) lID.ids.push_back(18);
785 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationAngTight)) lID.ids.push_back(19);
786 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngLoose)) lID.ids.push_back(20);
787 if (muon::isGoodMuon(*recoMuon,muon::TMOneStationAngTight)) lID.ids.push_back(21);
788 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtLoose)) lID.ids.push_back(22);
789 if (muon::isGoodMuon(*recoMuon,muon::TMLastStationOptimizedBarrelLowPtTight)) lID.ids.push_back(23);
790
791 lID.caloCompat = recoMuon->caloCompatibility();
792 lID.segCompat = muon::segmentCompatibility(*recoMuon);
793 lID.nChambers = recoMuon->numberOfChambers();
794 lID.nMatchesLoose = recoMuon->numberOfMatches(reco::Muon::NoArbitration);
795 lID.nMatchesMedium = recoMuon->numberOfMatches(reco::Muon::SegmentArbitration);
796 lID.nMatchesTight = recoMuon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
797 lID.dB = (*iter).dB();
798
799 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
800 aVec.push_back(lObj);
801 }
802 }
803 }
804
805 }//HbbMuons
806
807 void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
808 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
809 std::vector<HbbAnalysis::Tau> & aVec)
810 {//HbbTaus
811
812 if (aCol.isValid()){
813 if (aCol->size() > 0) {
814
815 unsigned int iEle = 0;
816 for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
817 iter != aCol->end();
818 ++iter,++iEle)
819 {
820 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
821
822 HbbAnalysis::GenVars lGen;
823 if (!processData_ && (*iter).genLepton()){
824 lGen.valid = true;
825 lGen.E = (*iter).genLepton()->energy();
826 lGen.pT = (*iter).genLepton()->pt();
827 lGen.eta = (*iter).genLepton()->eta();
828 lGen.y = (*iter).genLepton()->y();
829 lGen.phi = (*iter).genLepton()->phi();
830 lGen.charge = (*iter).genLepton()->charge();
831 lGen.pdgId = (*iter).genLepton()->pdgId();
832 lGen.status = (*iter).genLepton()->status();
833 lGen.mass = (*iter).genLepton()->mass();
834 lGen.vx = (*iter).genLepton()->vx();
835 lGen.vy = (*iter).genLepton()->vy();
836 lGen.vz = (*iter).genLepton()->vz();
837 }
838 else {
839 lGen.valid = false;
840 lGen.E = 0;
841 lGen.pT = 0;
842 lGen.eta = 0;
843 lGen.y = 0;
844 lGen.phi = 0;
845 lGen.charge = 0;
846 lGen.pdgId = 0;
847 lGen.status = 0;
848 lGen.mass = 0;
849 lGen.vx = 0;
850 lGen.vy = 0;
851 lGen.vz = 0;
852 }
853
854
855 HbbAnalysis::GenVars lGenJet;
856 if (!processData_ && (*iter).genJet()){
857 lGenJet.valid = true;
858 lGenJet.E = (*iter).genJet()->energy();
859 lGenJet.pT = (*iter).genJet()->pt();
860 lGenJet.eta = (*iter).genJet()->eta();
861 lGenJet.y = (*iter).genJet()->y();
862 lGenJet.phi = (*iter).genJet()->phi();
863 lGenJet.charge = (*iter).genJet()->charge();
864 lGenJet.pdgId = (*iter).genJet()->pdgId();
865 lGenJet.status = (*iter).genJet()->status();
866 lGenJet.mass = (*iter).genJet()->mass();
867 lGenJet.vx = (*iter).genJet()->vx();
868 lGenJet.vy = (*iter).genJet()->vy();
869 lGenJet.vz = (*iter).genJet()->vz();
870 }
871 else {
872 lGenJet.valid = false;
873 lGenJet.E = 0;
874 lGenJet.pT = 0;
875 lGenJet.eta = 0;
876 lGenJet.y = 0;
877 lGenJet.phi = 0;
878 lGenJet.charge = 0;
879 lGenJet.pdgId = 0;
880 lGenJet.status = 0;
881 lGenJet.mass = 0;
882 lGenJet.vx = 0;
883 lGenJet.vy = 0;
884 lGenJet.vz = 0;
885 }
886
887 HbbAnalysis::BaseVars lReco;
888 lReco.E = (*iter).energy();
889 lReco.pT = (*iter).pt();
890 lReco.eta = (*iter).eta();
891 lReco.y = (*iter).y();
892 lReco.phi = (*iter).phi();
893 lReco.charge = (*iter).charge();
894 lReco.vx = (*iter).vx();
895 lReco.vy = (*iter).vy();
896 lReco.vz = (*iter).vz();
897
898 bool isCalo = (*iter).isCaloTau();
899 bool isPF = (*iter).isPFTau();
900
901 assert (isCalo == !isPF);
902
903 HbbAnalysis::TrkVars lLead;
904 if (isCalo) {
905 lLead.signedSipt = (*iter).leadTracksignedSipt();
906
907 reco::TrackRef lCaloTrk = (*iter).leadTrack();
908
909 if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
910 lLead.pT = lCaloTrk->pt();
911 lLead.eta = lCaloTrk->eta();
912 lLead.phi = lCaloTrk->phi();
913
914 lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
915
916 if ( aRecoVertices->size() >= 1 ) {
917 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
918 lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
919 lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
920 }
921 else {
922 lLead.IPxy = 0;
923 lLead.IPz = 0;
924 }
925 }
926 else {
927 lLead.pT = 0;
928 lLead.eta = 0;
929 lLead.phi = 0;
930 lLead.matchDist = 0;
931 lLead.IPxy = 0;
932 lLead.IPz = 0;
933 lLead.signedSipt = 0;
934 }
935 }//calo
936 else {
937 lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
938
939 reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
940
941 if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
942 lLead.pT = lHadrCand->pt();
943 lLead.eta = lHadrCand->eta();
944 lLead.phi = lHadrCand->phi();
945
946 lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
947
948 reco::TrackRef lTrk = lHadrCand->trackRef();
949
950 if ( aRecoVertices->size() >= 1) {
951 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
952 lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
953 lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
954 }
955 else {
956 lLead.IPxy = 0;
957 lLead.IPz = 0;
958 }
959 }
960 else {
961 lLead.pT = 0;
962 lLead.eta = 0;
963 lLead.phi = 0;
964 lLead.matchDist = 0;
965 lLead.IPxy = 0;
966 lLead.IPz = 0;
967 lLead.signedSipt = 0;
968 }
969
970 }//pf
971
972
973
974 const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
975 bool lPrint = false;
976 //a few warning if additional discriminants are found:
977 if ((isPF && lIDs.size() != 16) ||
978 (isCalo && lIDs.size() != 3))
979 lPrint = true;
980
981 if (lPrint) {
982 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
983 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
984 std::cout << "------ ID names = " << std::endl;
985 }
986
987
988 HbbAnalysis::CaloTauIDVars lcaloId;
989 lcaloId.byIsolation = 0;
990 lcaloId.byLeadingTrackFinding = 0;
991 lcaloId.byLeadingTrackPtCut = 0;
992
993 HbbAnalysis::PFTauIDVars lpfId;
994 lpfId.byLeadingTrackFinding = 0;
995 lpfId.byLeadingTrackPtCut = 0;
996 lpfId.byTrackIsolation = 0;
997 lpfId.byECALIsolation = 0;
998 lpfId.byIsolation = 0;
999 lpfId.againstElectron = 0;
1000 lpfId.againstMuon = 0;
1001 lpfId.byIsolationUsingLeadingPion = 0;
1002 lpfId.byTaNC = 0;
1003 lpfId.byTaNCfrHalfPercent = 0;
1004 lpfId.byTaNCfrOnePercent = 0;
1005 lpfId.byTaNCfrQuarterPercent = 0;
1006 lpfId.byTaNCfrTenthPercent = 0;
1007 lpfId.ecalIsolationUsingLeadingPion = 0;
1008 lpfId.leadingPionPtCut = 0;
1009 lpfId.trackIsolationUsingLeadingPion = 0;
1010
1011
1012
1013 for (unsigned int id(0); id<lIDs.size(); ++id){
1014
1015 std::string lName = lIDs.at(id).first;
1016 float lDiscri = lIDs.at(id).second;
1017
1018 if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
1019 //pf
1020
1021 if (isPF) {
1022 if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
1023 if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
1024 if (lName.find("trackIsolationUsingLeadingPion") != lName.npos) lpfId.trackIsolationUsingLeadingPion = lDiscri;
1025 if (lName.find("trackIsolation") != lName.npos &&
1026 lName.find("trackIsolationUsingLeadingPion") == lName.npos) lpfId.byTrackIsolation = lDiscri;
1027 if (lName.find("ecalIsolationUsingLeadingPion") != lName.npos) lpfId.ecalIsolationUsingLeadingPion = lDiscri;
1028 if (lName.find("ecalIsolation") != lName.npos &&
1029 lName.find("ecalIsolationUsingLeadingPion") == lName.npos) lpfId.byECALIsolation = lDiscri;
1030 if (lName.find("byIsolationUsingLeadingPion") != lName.npos) lpfId.byIsolationUsingLeadingPion = lDiscri;
1031 if (lName.find("byIsolation") != lName.npos &&
1032 lName.find("byIsolationUsingLeadingPion") == lName.npos) lpfId.byIsolation = lDiscri;
1033 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
1034 if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
1035 if (lName.find("byTaNCfrHalfPercent") != lName.npos) lpfId.byTaNCfrHalfPercent = lDiscri;
1036 if (lName.find("byTaNCfrOnePercent") != lName.npos) lpfId.byTaNCfrOnePercent = lDiscri;
1037 if (lName.find("byTaNCfrQuarterPercent") != lName.npos) lpfId.byTaNCfrQuarterPercent = lDiscri;
1038 if (lName.find("byTaNCfrTenthPercent") != lName.npos) lpfId.byTaNCfrTenthPercent = lDiscri;
1039 if (lName.find("byTaNC") != lName.npos &&
1040 lName.find("byTaNCfr") == lName.npos) lpfId.byTaNC = lDiscri;
1041 if (lName.find("leadingPionPtCut") != lName.npos) lpfId.leadingPionPtCut = lDiscri;
1042 }
1043 if (isCalo){
1044 if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
1045 if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
1046 if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
1047 }
1048
1049
1050 }
1051
1052
1053 if (isCalo){
1054
1055 HbbAnalysis::CaloTauIsoVars lcaloIso;
1056 lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
1057 lcaloIso.nSigTracks = (*iter).signalTracks().size();
1058 lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
1059 lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
1060 lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
1061 lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
1062 lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
1063 lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
1064 lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
1065
1066 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
1067 aVec.push_back(lObj);
1068 }
1069 else {
1070
1071 HbbAnalysis::PFTauIsoVars lpfIso;
1072 lpfIso.nSigCands = (*iter).signalPFCands().size();
1073 lpfIso.nIsoCands = (*iter).isolationPFCands().size();
1074 lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
1075 //lpfIso.emFraction = (*iter).emFraction();
1076 lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
1077 lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
1078 lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
1079 lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
1080 lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
1081
1082 HbbAnalysis::PFTauCandVars lHadr;
1083 lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
1084 lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
1085 lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
1086
1087 HbbAnalysis::PFTauCandVars lNeutr;
1088 lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
1089 lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
1090 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
1091
1092 HbbAnalysis::PFTauCandVars lGamma;
1093 lGamma.nSigCands = (*iter).signalPFGammaCands().size();
1094 lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
1095 lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
1096
1097 HbbAnalysis::PFTauEleIDVars lEleId;
1098 if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
1099 lEleId.pT = (*iter).electronPreIDTrack()->pt();
1100 lEleId.eta = (*iter).electronPreIDTrack()->eta();
1101 lEleId.phi = (*iter).electronPreIDTrack()->phi();
1102 }
1103 else {
1104 lEleId.pT = 0;
1105 lEleId.eta = 0;
1106 lEleId.phi = 0;
1107 }
1108
1109 lEleId.output = (*iter).electronPreIDOutput();
1110 lEleId.decision = (*iter).electronPreIDDecision();
1111
1112 HbbAnalysis::PFTauMuIDVars lMuId;
1113 lMuId.caloCompat = (*iter).caloComp();
1114 lMuId.segCompat = (*iter).segComp();
1115 lMuId.decision = (*iter).muonDecision();
1116
1117 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
1118 aVec.push_back(lObj);
1119 }
1120 }
1121 }
1122 }
1123
1124 }//HbbTaus
1125
1126 void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
1127 const HbbAnalysis::JetFlavour & aJetFlav,
1128 const edm::Handle<reco::GenParticleCollection> & aGenParticles,
1129 std::vector<HbbAnalysis::Jet> & aVec)
1130 {//HbbJets
1131
1132 if (aCol.isValid()){//valid
1133 if (aCol->size() > 0) {//non empty
1134
1135 unsigned int iEle = 0;
1136 for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
1137 iter != aCol->end();
1138 ++iter,++iEle)
1139 {//loop on element
1140 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
1141
1142 HbbAnalysis::GenVars lGen;
1143 if (!processData_ && (*iter).genParton()){
1144 lGen.valid = true;
1145 lGen.E = (*iter).genParton()->energy();
1146 lGen.pT = (*iter).genParton()->pt();
1147 lGen.eta = (*iter).genParton()->eta();
1148 lGen.y = (*iter).genParton()->y();
1149 lGen.phi = (*iter).genParton()->phi();
1150 lGen.charge = (*iter).genParton()->charge();
1151 lGen.pdgId = (*iter).genParton()->pdgId();
1152 lGen.status = (*iter).genParton()->status();
1153 lGen.mass = (*iter).genParton()->mass();
1154 lGen.vx = (*iter).genParton()->vx();
1155 lGen.vy = (*iter).genParton()->vy();
1156 lGen.vz = (*iter).genParton()->vz();
1157 }
1158 else {
1159 lGen.valid = false;
1160 lGen.E = 0;
1161 lGen.pT = 0;
1162 lGen.eta = 0;
1163 lGen.y = 0;
1164 lGen.phi = 0;
1165 lGen.charge = 0;
1166 lGen.pdgId = 0;
1167 lGen.status = 0;
1168 lGen.mass = 0;
1169 lGen.vx = 0;
1170 lGen.vy = 0;
1171 lGen.vz = 0;
1172 }
1173
1174
1175 HbbAnalysis::GenVars lGenJet;
1176 if (!processData_ && (*iter).genJet()){
1177 lGenJet.valid = true;
1178 lGenJet.E = (*iter).genJet()->energy();
1179 lGenJet.pT = (*iter).genJet()->pt();
1180 lGenJet.eta = (*iter).genJet()->eta();
1181 lGenJet.y = (*iter).genJet()->y();
1182 lGenJet.phi = (*iter).genJet()->phi();
1183 lGenJet.charge = (*iter).genJet()->charge();
1184 lGenJet.pdgId = (*iter).genJet()->pdgId();
1185 lGenJet.status = (*iter).genJet()->status();
1186 lGenJet.mass = (*iter).genJet()->mass();
1187 lGenJet.vx = (*iter).genJet()->vx();
1188 lGenJet.vy = (*iter).genJet()->vy();
1189 lGenJet.vz = (*iter).genJet()->vz();
1190 }
1191 else {
1192 lGenJet.valid = false;
1193 lGenJet.E = 0;
1194 lGenJet.pT = 0;
1195 lGenJet.eta = 0;
1196 lGenJet.y = 0;
1197 lGenJet.phi = 0;
1198 lGenJet.charge = 0;
1199 lGenJet.pdgId = 0;
1200 lGenJet.status = 0;
1201 lGenJet.mass = 0;
1202 lGenJet.vx = 0;
1203 lGenJet.vy = 0;
1204 lGenJet.vz = 0;
1205 }
1206
1207 HbbAnalysis::BaseVars lReco;
1208 lReco.E = (*iter).energy();
1209 lReco.pT = (*iter).pt();
1210 lReco.eta = (*iter).eta();
1211 //lReco.etaDet = (*iter).detectorEta((*iter).vz(),(*iter).eta());
1212 lReco.y = (*iter).y();
1213 lReco.phi = (*iter).phi();
1214 lReco.charge = (*iter).jetCharge();
1215 lReco.vx = (*iter).vx();
1216 lReco.vy = (*iter).vy();
1217 lReco.vz = (*iter).vz();
1218 lReco.hltMatch = (*iter).triggerObjectMatches().size();
1219 //lReco.myEtaDet = HbbAnalysis::EtaDetector(lReco);
1220
1221 unsigned int lFlav = 0;
1222 if (!processData_ && aJetFlav.nPartons()) {
1223 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
1224 }
1225
1226 HbbAnalysis::JetVars lCommon;
1227 lCommon.flavour = lFlav;
1228 lCommon.partonFlavour = (*iter).partonFlavour();
1229 lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
1230 lCommon.rawpT = (*iter).pt();
1231 //if ((*iter).hasCorrFactors() && (*iter).corrFactor("raw")>0)
1232 //lCommon.rawpT = (*iter).pt()/((*iter).corrFactor("raw"));
1233
1234
1235 // std::cout << " -- Current JEC SET " << (*iter).currentJECSet()
1236 // << " Level " << (*iter).currentJECLevel()
1237 // << std::endl;
1238
1239 HbbAnalysis::JetECorVars lEnergyCorrections;
1240 if ((*iter).jecSetsAvailable()){
1241 float lJecFactor = (*iter).jecFactor("Uncorrected","NONE",(*iter).currentJECSet());
1242 if (lJecFactor > 0) lCommon.rawpT = (*iter).pt()*lJecFactor;
1243 if (debug_){
1244 std::cout << " ---------------------------------------------- " << std::endl
1245 << " - Raw to Cor Jet # " << iEle << " = " << std::endl
1246 << " -- Raw pT = " << lCommon.rawpT << " eta " << lReco.eta << " phi " << lReco.phi << std::endl;
1247 }
1248
1249 std::vector<std::string> lJECnames = (*iter).availableJECSets();
1250 for (unsigned int iSet(0); iSet < lJECnames.size(); ++iSet){
1251 if (debug_) std::cout << " -- JEC SET " << iSet << " " << lJECnames[iSet] << std::endl;
1252 std::vector<std::string> lJEClevels = (*iter).availableJECLevels(iSet);
1253 for (unsigned int iLev(0); iLev<lJEClevels.size(); ++iLev){
1254 if (debug_) std::cout << " ---- JEC level " << iLev << " " << lJEClevels[iLev]
1255 << " , factor = " << (*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)
1256 << std::endl;
1257 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>(lJEClevels[iLev],(*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)));
1258 }
1259 }
1260 if (debug_) std::cout << " -- Reco pT = " << lReco.pT
1261 << std::endl;
1262 }
1263
1264 if ((*iter).isCaloJet()) {
1265 jecUncCalo->setJetEta((*iter).eta());
1266 jecUncCalo->setJetPt((*iter).pt());
1267 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncCalo->getUncertainty(true)));
1268 } else if ((*iter).isPFJet()) {
1269 jecUncPF->setJetEta((*iter).eta());
1270 jecUncPF->setJetPt((*iter).pt());
1271 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncPF->getUncertainty(true)));
1272 } else if ((*iter).isJPTJet()) {
1273 jecUncJPT->setJetEta((*iter).eta());
1274 jecUncJPT->setJetPt((*iter).pt());
1275 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncJPT->getUncertainty(true)));
1276 }
1277
1278 //lEnergyCorrections.L1 = (*iter).jecFactor("L1Offset","NONE",(*iter).currentJECSet());
1279 //lEnergyCorrections.L1JPT = (*iter).jecFactor("L1JPTOffset","NONE",(*iter).currentJECSet());
1280 //lEnergyCorrections.L2 = (*iter).jecFactor("L2Relative","NONE",(*iter).currentJECSet());
1281 //lEnergyCorrections.L3 = (*iter).jecFactor("L3Absolute","NONE",(*iter).currentJECSet());
1282 //if (processData_) lEnergyCorrections.L2L3Residual = (*iter).jecFactor("L2L3Residual","NONE",(*iter).currentJECSet());
1283
1284 lCommon.etaMean = (*iter).etaPhiStatistics().etaMean;
1285 lCommon.phiMean = (*iter).etaPhiStatistics().phiMean;
1286 lCommon.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
1287 lCommon.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
1288 lCommon.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
1289
1290
1291 //lCommon.rawEta = (*iter).;
1292 //lCommon.rawPhi = (*iter).;
1293 // p_hasJetCorrFactors->Fill(aJet.hasJetCorrFactors());
1294
1295 HbbAnalysis::JetBtagVars lBtag;
1296 lBtag.cSV = (*iter).bDiscriminator("combinedSecondaryVertexBJetTags");
1297 lBtag.cSVMVA = (*iter).bDiscriminator("combinedSecondaryVertexMVABJetTags");
1298 lBtag.iPMVA = (*iter).bDiscriminator("impactParameterMVABJetTags");
1299 lBtag.bProba = (*iter).bDiscriminator("jetBProbabilityBJetTags");
1300 lBtag.probability = (*iter).bDiscriminator("jetProbabilityBJetTags");
1301 lBtag.sSVHP = (*iter).bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
1302 lBtag.sSVHE = (*iter).bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1303 lBtag.softElectronByPt = ((*iter).bDiscriminator("softElectronByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByPtBJetTags");
1304 lBtag.softElectronByIP3d = ((*iter).bDiscriminator("softElectronByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softElectronByIP3dBJetTags");
1305 lBtag.softMuon = ((*iter).bDiscriminator("softMuonBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonBJetTags");
1306 lBtag.softMuonByPt = ((*iter).bDiscriminator("softMuonByPtBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByPtBJetTags");
1307 lBtag.softMuonByIP3d = ((*iter).bDiscriminator("softMuonByIP3dBJetTags") < -100) ? -100 : (*iter).bDiscriminator("softMuonByIP3dBJetTags");
1308
1309 //std::cout << " -- New values of b-discri for jet : " << iEle << std::endl
1310 // << " ---- softElecs: " << lBtag.softElectronByPt << " " << lBtag.softElectronByIP3d << std::endl
1311 // << " ---- softMus: " << lBtag.softMuon << " " << lBtag.softMuonByPt << " " << lBtag.softMuonByIP3d << std::endl;
1312
1313
1314 lBtag.tCHE = (*iter).bDiscriminator("trackCountingHighEffBJetTags");
1315 lBtag.tCHP = (*iter).bDiscriminator("trackCountingHighPurBJetTags");
1316
1317
1318 bool isCalo = (*iter).isCaloJet();
1319 bool isPF = (*iter).isPFJet();
1320 bool isJPT = (*iter).isJPTJet();
1321
1322 //std::cout << " -- isCalo = " << isCalo << ", isPF = " << isPF << std::endl;
1323
1324 //assert (isCalo == !isPF);
1325 HbbAnalysis::JetIDVars lId;
1326 lId.fHPD = 0;
1327 lId.fRBX = 0;
1328 lId.n90Hits = 0;
1329 lId.hitsInN90 = 0;
1330 lId.restrictedEMF = 0;
1331 lId.nHCALTowers = 0;
1332 lId.nECALTowers = 0;
1333 if (isCalo || isJPT) {
1334 lId.fHPD = (*iter).jetID().fHPD;
1335 lId.fRBX = (*iter).jetID().fRBX;
1336 lId.n90Hits = (*iter).jetID().n90Hits;
1337 lId.hitsInN90 = (*iter).jetID().hitsInN90;
1338 lId.restrictedEMF = (*iter).jetID().restrictedEMF;
1339 lId.nHCALTowers = (*iter).jetID().nHCALTowers;
1340 lId.nECALTowers = (*iter).jetID().nECALTowers;
1341 }
1342 if (isCalo){
1343 HbbAnalysis::CaloJetVars lCalo;
1344 lCalo.maxEInEmTowers = (*iter).maxEInEmTowers();
1345 lCalo.maxEInHadTowers = (*iter).maxEInHadTowers();
1346 lCalo.energyFractionHadronic = (*iter).energyFractionHadronic();
1347 lCalo.emEnergyFraction = (*iter).emEnergyFraction();
1348 lCalo.hadEnergyInHB = (*iter).hadEnergyInHB();
1349 lCalo.hadEnergyInHO = (*iter).hadEnergyInHO();
1350 lCalo.hadEnergyInHE = (*iter).hadEnergyInHE();
1351 lCalo.hadEnergyInHF = (*iter).hadEnergyInHF();
1352 lCalo.emEnergyInEB = (*iter).emEnergyInEB();
1353 lCalo.emEnergyInEE = (*iter).emEnergyInEE();
1354 lCalo.emEnergyInHF = (*iter).emEnergyInHF();
1355 lCalo.towersArea = (*iter).towersArea();
1356 lCalo.n90 = (*iter).n90();
1357 lCalo.n60 = (*iter).n60();
1358
1359 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lBtag,lId,lEnergyCorrections);
1360 aVec.push_back(lObj);
1361 }
1362 HbbAnalysis::JPTPFJetVars lJPTPF;
1363 lJPTPF.chargedHadronEnergy = 0;
1364 lJPTPF.chargedHadronEnergyFraction = 0;
1365 lJPTPF.neutralHadronEnergy = 0;
1366 lJPTPF.neutralHadronEnergyFraction = 0;
1367 lJPTPF.chargedEmEnergy = 0;
1368 lJPTPF.chargedEmEnergyFraction = 0;
1369 lJPTPF.neutralEmEnergy = 0;
1370 lJPTPF.neutralEmEnergyFraction = 0;
1371 lJPTPF.chargedMultiplicity = 0;
1372 lJPTPF.muonMultiplicity = 0;
1373
1374 if (isPF || isJPT){
1375 lJPTPF.chargedEmEnergy = (*iter).chargedEmEnergy();
1376 lJPTPF.neutralEmEnergy = (*iter).neutralEmEnergy();
1377 lJPTPF.muonMultiplicity = (*iter).muonMultiplicity();
1378 lJPTPF.chargedHadronEnergy = (*iter).chargedHadronEnergy();
1379 lJPTPF.neutralHadronEnergy = (*iter).neutralHadronEnergy();
1380 lJPTPF.chargedMultiplicity = (*iter).chargedMultiplicity();
1381
1382 lJPTPF.chargedHadronEnergyFraction = (*iter).chargedHadronEnergyFraction();
1383 lJPTPF.neutralHadronEnergyFraction = (*iter).neutralHadronEnergyFraction();
1384 lJPTPF.chargedEmEnergyFraction = (*iter).chargedEmEnergyFraction();
1385 lJPTPF.neutralEmEnergyFraction = (*iter).neutralEmEnergyFraction();
1386 }
1387 if (isJPT) {
1388 HbbAnalysis::JPTJetVars lJPT;
1389 reco::TrackRefVector pionsInVInC = (*iter).pionsInVertexInCalo();
1390 reco::TrackRefVector pionsInVOuC = (*iter).pionsInVertexOutCalo();
1391 reco::TrackRefVector pionsOuVInC = (*iter).pionsOutVertexInCalo();
1392
1393 reco::TrackRefVector muonsInVInC = (*iter).muonsInVertexInCalo();
1394 reco::TrackRefVector muonsInVOuC = (*iter).muonsInVertexOutCalo();
1395 reco::TrackRefVector muonsOuVInC = (*iter).muonsOutVertexInCalo();
1396
1397 reco::TrackRefVector elecsInVInC = (*iter).elecsInVertexInCalo();
1398 reco::TrackRefVector elecsInVOuC = (*iter).elecsInVertexOutCalo();
1399 reco::TrackRefVector elecsOuVInC = (*iter).elecsOutVertexInCalo();
1400
1401 /*
1402 unsigned test_track_count = pionsInVInC.size() + pionsInVOuC.size() + pionsOuVInC.size();
1403 std::cout << "Total Pion Track Count = " << test_track_count << std::endl;
1404 */
1405
1406 for (reco::TrackRefVector::const_iterator trk_iter = pionsInVInC.begin();
1407 trk_iter != pionsInVInC.end();
1408 ++trk_iter) {
1409 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(1,(*trk_iter)->pt()));
1410 }
1411 for (reco::TrackRefVector::const_iterator trk_iter = pionsInVOuC.begin();
1412 trk_iter != pionsInVOuC.end();
1413 ++trk_iter) {
1414 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(2,(*trk_iter)->pt()));
1415 }
1416 for (reco::TrackRefVector::const_iterator trk_iter = pionsOuVInC.begin();
1417 trk_iter != pionsOuVInC.end();
1418 ++trk_iter) {
1419 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(3,(*trk_iter)->pt()));
1420 }
1421
1422 for (reco::TrackRefVector::const_iterator trk_iter = muonsInVInC.begin();
1423 trk_iter != muonsInVInC.end();
1424 ++trk_iter) {
1425 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(4,(*trk_iter)->pt()));
1426 }
1427 for (reco::TrackRefVector::const_iterator trk_iter = muonsInVOuC.begin();
1428 trk_iter != muonsInVOuC.end();
1429 ++trk_iter) {
1430 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(5,(*trk_iter)->pt()));
1431 }
1432 for (reco::TrackRefVector::const_iterator trk_iter = muonsOuVInC.begin();
1433 trk_iter != muonsOuVInC.end();
1434 ++trk_iter) {
1435 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(6,(*trk_iter)->pt()));
1436 }
1437
1438 for (reco::TrackRefVector::const_iterator trk_iter = elecsInVInC.begin();
1439 trk_iter != elecsInVInC.end();
1440 ++trk_iter) {
1441 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(7,(*trk_iter)->pt()));
1442 }
1443 for (reco::TrackRefVector::const_iterator trk_iter = elecsInVOuC.begin();
1444 trk_iter != elecsInVOuC.end();
1445 ++trk_iter) {
1446 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(8,(*trk_iter)->pt()));
1447 }
1448 for (reco::TrackRefVector::const_iterator trk_iter = elecsOuVInC.begin();
1449 trk_iter != elecsOuVInC.end();
1450 ++trk_iter) {
1451 lJPT.particleStatusPt.push_back(std::pair<unsigned int,double>(9,(*trk_iter)->pt()));
1452 }
1453
1454 // const reco::TrackRefVector& pionsInVertexInCalo () const{return jptSpecific().pionsInVertexInCalo; }
1455 // const reco::TrackRefVector& pionsInVertexOutCalo() const{return jptSpecific().pionsInVertexOutCalo;}
1456 // const reco::TrackRefVector& pionsOutVertexInCalo() const{return jptSpecific().pionsOutVertexInCalo;}
1457 // const reco::TrackRefVector& muonsInVertexInCalo () const{return jptSpecific().muonsInVertexInCalo; }
1458 // const reco::TrackRefVector& muonsInVertexOutCalo() const{return jptSpecific().muonsInVertexOutCalo;}
1459 // const reco::TrackRefVector& muonsOutVertexInCalo() const{return jptSpecific().muonsOutVertexInCalo;}
1460 // const reco::TrackRefVector& elecsInVertexInCalo () const{return jptSpecific().elecsInVertexInCalo; }
1461 // const reco::TrackRefVector& elecsInVertexOutCalo() const{return jptSpecific().elecsInVertexOutCalo;}
1462 // const reco::TrackRefVector& elecsOutVertexInCalo() const{return jptSpecific().elecsOutVertexInCalo;}
1463 lJPT.zspCorrection = (*iter).zspCorrection();
1464 lJPT.elecMultiplicity = (*iter).elecMultiplicity();
1465
1466 HbbAnalysis::CaloJetVars lCalo;
1467 const reco::JPTJet * lJetRef = dynamic_cast<const reco::JPTJet *>((*iter).originalObject());
1468 edm::RefToBase<reco::Jet> jptjetRef = lJetRef->getCaloJetRef();
1469
1470 // Dynamic_cast to CaloJet object
1471 reco::CaloJet const * rawcalojet =
1472 dynamic_cast<reco::CaloJet const *>( &* jptjetRef);
1473 lJPT.calopT = rawcalojet->pt();
1474 lJPT.caloEta = rawcalojet->eta();
1475 if (debug_) {
1476 std::cout << " -- Raw CaloJet pT = " << rawcalojet->pt() << std::endl;
1477 std::cout << " -- Raw CaloJet Eta = " << rawcalojet->eta() << std::endl;
1478 }
1479 lCalo.maxEInEmTowers = rawcalojet->maxEInEmTowers();
1480 lCalo.maxEInHadTowers = rawcalojet->maxEInHadTowers();
1481 lCalo.energyFractionHadronic = rawcalojet->energyFractionHadronic();
1482 lCalo.emEnergyFraction = rawcalojet->emEnergyFraction();
1483 lCalo.hadEnergyInHB = rawcalojet->hadEnergyInHB();
1484 lCalo.hadEnergyInHO = rawcalojet->hadEnergyInHO();
1485 lCalo.hadEnergyInHE = rawcalojet->hadEnergyInHE();
1486 lCalo.hadEnergyInHF = rawcalojet->hadEnergyInHF();
1487 lCalo.emEnergyInEB = rawcalojet->emEnergyInEB();
1488 lCalo.emEnergyInEE = rawcalojet->emEnergyInEE();
1489 lCalo.emEnergyInHF = rawcalojet->emEnergyInHF();
1490 lCalo.towersArea = rawcalojet->towersArea();
1491 lCalo.n90 = rawcalojet->n90();
1492 lCalo.n60 = rawcalojet->n60();
1493
1494 lCommon.etaMean = rawcalojet->etaPhiStatistics().etaMean;
1495 lCommon.phiMean = rawcalojet->etaPhiStatistics().phiMean;
1496 lCommon.etaEtaMoment = rawcalojet->etaPhiStatistics().etaEtaMoment;
1497 lCommon.phiPhiMoment = rawcalojet->etaPhiStatistics().phiPhiMoment;
1498 lCommon.etaPhiMoment = rawcalojet->etaPhiStatistics().etaPhiMoment;
1499
1500 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lCalo,lJPT,lJPTPF,lBtag,lId,lEnergyCorrections);
1501 aVec.push_back(lObj);
1502 }
1503 if (isPF) {
1504 HbbAnalysis::PFJetVars lPF;
1505 lPF.chargedMuEnergy = (*iter).chargedMuEnergy();
1506 lPF.chargedMuEnergyFraction = (*iter).chargedMuEnergyFraction();
1507 lPF.neutralMultiplicity = (*iter).neutralMultiplicity();
1508 lPF.numberOfDaughters = (*iter).numberOfDaughters();
1509 lPF.HFHadronEnergy = (*iter).HFHadronEnergy();
1510
1511 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lJPTPF,lBtag,lEnergyCorrections);
1512 aVec.push_back(lObj);
1513 }
1514
1515 }//loop on element
1516 }//non empty
1517 }//valid
1518
1519 }//HbbJets
1520
1521 void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
1522 HbbAnalysis::Met & aMet)
1523 {//HbbMet
1524 if (aCol.isValid()) {
1525 HbbAnalysis::MetVars lGen;
1526 HbbAnalysis::MetVars lReco;
1527
1528 assert(aCol->size() == 1);
1529 const pat::MET & lMet = *(aCol->begin());
1530
1531 lReco.mET = lMet.pt();
1532 lReco.mEx = lMet.px();
1533 lReco.mEy = lMet.py();
1534 lReco.sumET = lMet.sumEt();
1535 lReco.phi = lMet.phi();
1536 lReco.mEtSig = lMet.mEtSig();
1537
1538 const reco::GenMET *lGenMET = lMet.genMET();
1539
1540 if (!processData_ && lGenMET){
1541 lGen.mET = lGenMET->pt();
1542 lGen.mEx = lGenMET->px();
1543 lGen.mEy = lGenMET->py();
1544 lGen.sumET = lGenMET->sumEt();
1545 lGen.phi = lGenMET->phi();
1546 lGen.mEtSig = lGenMET->mEtSig();
1547 }
1548 else {
1549 lGen.mET = 0;
1550 lGen.mEx = 0;
1551 lGen.mEy = 0;
1552 lGen.sumET = 0;
1553 lGen.phi = 0;
1554 lGen.mEtSig = 0;
1555 }
1556
1557 aMet.genVars(lGen);
1558 aMet.recoVars(lReco);
1559 }
1560 }//HbbMet
1561
1562 void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1563 const edm::TriggerNames & aNames,
1564 std::vector<HbbAnalysis::Trigger> & aVec)
1565 {//HbbTrigger
1566
1567 if (aCol.isValid()){
1568 //edm::TriggerNames lNames;
1569 //lNames.init(*aCol);
1570
1571 //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1572 //bool valid=false;
1573 for (unsigned int i=0; i<aCol->size(); ++i){
1574 std::string trueName = aNames.triggerName(i);//.at(i);
1575
1576 HbbAnalysis::TriggerVars lTrigVars;
1577 lTrigVars.name = trueName;
1578 lTrigVars.index = i;
1579 lTrigVars.accept = aCol->accept(i);
1580
1581 HbbAnalysis::Trigger lObj(lTrigVars);
1582
1583 aVec.push_back(lObj);
1584 }
1585
1586 }
1587
1588 }
1589
1590 void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1591 std::vector<HbbAnalysis::GenParticle> & aVec)
1592 {//genparticles
1593
1594 //add genParticle inside vector
1595 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1596 {//loop on particles
1597 const reco::Candidate & p = (*aCol)[mccount];
1598
1599 HbbAnalysis::MCVars lMC;
1600 lMC.index = mccount;
1601 lMC.E = p.energy();
1602 lMC.pT = p.pt();
1603 lMC.eta = p.eta();
1604 lMC.y = p.y();
1605 lMC.phi = p.phi();
1606 lMC.pdgId = p.pdgId();
1607 lMC.status = p.status();
1608 if (p.status()==3 || (p.status()==2 && (abs(p.pdgId())==4 || abs(p.pdgId())==5)) || (p.status()==1 && p.pt()>5)){
1609 HbbAnalysis::GenParticle lObj(lMC);
1610 aVec.push_back(lObj);
1611 }
1612 }//loop on particles
1613
1614 //now need to get the list of parents....
1615
1616 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1617 {//loop on particles
1618 const reco::Candidate & p = (*aCol)[mccount];
1619
1620 unsigned int nD = p.numberOfDaughters();
1621 //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1622 for(unsigned int dau=0;dau<nD;++dau){//loop on daughters
1623 const reco::Candidate * pDau = p.daughter(dau);
1624 //std::cout << pDau << " ("<<std::flush;
1625 for (unsigned int mccount2 = 0;mccount2<aCol->size();++mccount2)
1626 {//loop on particles
1627 const reco::Candidate & p2 = (*aCol)[mccount2];
1628 //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1629 HbbAnalysis::GenParticle & part2 = aVec.at(0);
1630 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1631 part2 = aVec.at(imc);
1632 if (part2.partVars().index == mccount2) break;
1633 }
1634 if (pDau == &p2) {
1635 part2.setParent(mccount);
1636 //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1637 break;
1638 }
1639
1640 //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1641 //if (p2.pdgId() == pDau->pdgId() && fabs(p2.energy()-pDau->energy())<0.000001 && fabs(p2.eta()-pDau->eta())<0.000001 && fabs(p2.phi()-pDau->phi())<0.000001){
1642 //part2.parent(mccount);
1643 //}
1644 }//loop on particles
1645 }//loop on daughters
1646 //std::cout << std::endl;
1647
1648 }//loop on particles
1649
1650 if (debug_>1){
1651 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1652 HbbAnalysis::GenParticle & p = aVec.at(imc);
1653 p.print();
1654 }
1655 }
1656
1657
1658 }//genparticles
1659
1660
1661
1662 void HbbTreeMaker::HbbVertices(const edm::Handle<std::vector<reco::Vertex> > & aCol,
1663 std::vector<HbbAnalysis::Vertex> & aVec)
1664 {
1665
1666 if (aCol.isValid()) {
1667 for (std::vector<reco::Vertex>::const_iterator iter = aCol->begin();
1668 iter != aCol->end();
1669 ++iter)
1670 {
1671
1672 if (!((*iter).isValid()) || (*iter).isFake()) continue;
1673
1674 HbbAnalysis::VertexVars lVtx;
1675
1676 if ((*iter).tracksSize() > 0) {
1677 for (std::vector<reco::TrackBaseRef>::const_iterator lTrk = (*iter).tracks_begin();
1678 lTrk != (*iter).tracks_end();
1679 ++lTrk) {
1680 lVtx.trackWeights.push_back((*iter).trackWeight(*lTrk));
1681 lVtx.trackpT.push_back((*(*lTrk)).pt());
1682 }
1683 }
1684
1685 if (lVtx.trackWeights.size() != (*iter).tracksSize()) {
1686 std::cout<< " -- Problem with tracks, size is not as expected ! "
1687 << std::endl
1688 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1689 << std::endl
1690 << " --- Size of trackWeights = " << lVtx.trackWeights.size()
1691 << std::endl;
1692 }
1693 if (lVtx.trackpT.size() != (*iter).tracksSize()) {
1694 std::cout<< " -- Problem with tracks, size is not as expected ! "
1695 << std::endl
1696 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1697 << std::endl
1698 << " --- Size of trackpT = " << lVtx.trackpT.size()
1699 << std::endl;
1700 }
1701
1702 lVtx.chi2 = (*iter).chi2();
1703 lVtx.ndof = (*iter).ndof();
1704 lVtx.x = (*iter).x();
1705 lVtx.y = (*iter).y();
1706 lVtx.z = (*iter).z();
1707 lVtx.rho = (*iter).position().Rho();
1708 lVtx.xError = (*iter).xError();
1709 lVtx.yError = (*iter).yError();
1710 lVtx.zError = (*iter).zError();
1711 lVtx.cov01 = (*iter).covariance(0,1);
1712 lVtx.cov02 = (*iter).covariance(0,2);
1713 lVtx.cov12 = (*iter).covariance(1,2);
1714
1715 //AJG
1716 /*
1717 std::cout << "Vertex (" << (*iter).x() << ","
1718 << (*iter).y() << ","
1719 << (*iter).z() << ")" << std::endl;
1720 */
1721
1722 HbbAnalysis::Vertex lObj(lVtx);
1723 aVec.push_back(lObj);
1724 }
1725 }
1726
1727 }
1728
1729 void HbbTreeMaker::HbbL1Objects(const edm::Handle<l1extra::L1JetParticleCollection> & aCol,
1730 std::vector<HbbAnalysis::L1Object> & aVec,
1731 const unsigned int aType)
1732 {
1733
1734 for (l1extra::L1JetParticleCollection::const_iterator iter = aCol->begin();
1735 iter != aCol->end();
1736 ++iter)
1737 {
1738
1739 HbbAnalysis::L1Vars lVars;
1740 lVars.pT = (*iter).pt();
1741 lVars.ET = (*iter).et();
1742 lVars.eta = (*iter).eta();
1743 lVars.phi = (*iter).phi();
1744 lVars.bx = (*iter).bx();
1745 lVars.type = aType;
1746
1747 HbbAnalysis::L1Object lObj(lVars);
1748 aVec.push_back(lObj);
1749
1750 }
1751
1752 }
1753
1754
1755 void HbbTreeMaker::HbbHLTObjects(const edm::Handle<trigger::TriggerEvent> & aCol,
1756 std::vector<HbbAnalysis::HLTObject> & aVec)
1757 {
1758
1759
1760 //cout
1761 //const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1762 //for (unsigned i=0; i<aCol->sizeFilters(); i++){
1763 //const edm::InputTag & lTag = aCol->filterTag(i);
1764 //std::cout << " -- ele " << i << ": " << lTag << ", key ids = " ;
1765 ////const int index = aCol->filterIndex(lTag);
1766 ////if (index >= aCol->sizeFilters()) {
1767 ////std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1768 ////continue;
1769 ////}
1770 //const trigger::Keys & k = aCol->filterKeys(i);
1771 //for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1772 //std::cout << toc[*ki].id() << ", " ;
1773 //}
1774 //std::cout << std::endl;
1775 //}
1776
1777 }
1778
1779 void HbbTreeMaker::fillHLTVector(const edm::InputTag & aTag,
1780 const edm::Handle<trigger::TriggerEvent> & aCol,
1781 std::vector<HbbAnalysis::HLTObject> & aVec,
1782 const unsigned int aType){
1783
1784 const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1785 const int index = aCol->filterIndex(aTag);
1786 if (index >= aCol->sizeFilters()) {
1787 //std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1788 return;
1789 }
1790
1791 const trigger::Keys & k = aCol->filterKeys(index);
1792
1793 for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1794 HbbAnalysis::HLTVars lVars;
1795 lVars.pT = toc[*ki].pt();
1796 lVars.eta = toc[*ki].eta();
1797 lVars.phi = toc[*ki].phi();
1798 lVars.id = toc[*ki].id();
1799 lVars.mass = toc[*ki].mass();
1800 lVars.type = aType;
1801 HbbAnalysis::HLTObject lObj(lVars);
1802 aVec.push_back(lObj);
1803 }
1804 }
1805
1806 void HbbTreeMaker::HbbGenInfo(const edm::Handle<edm::HepMCProduct> & amcProd,
1807 const edm::Handle<GenRunInfoProduct> & aRunProd)
1808 {
1809 const HepMC::GenEvent * genEvt = amcProd->GetEvent();
1810 HbbAnalysis::GenInfo lInfo;
1811
1812 lInfo.processID(genEvt->signal_process_id());
1813 lInfo.ptHat(genEvt->event_scale());
1814
1815 lInfo.internalXS(aRunProd->internalXSec().value(),
1816 aRunProd->internalXSec().error());
1817
1818 lInfo.externalXSLO(aRunProd->externalXSecLO().value(),
1819 aRunProd->externalXSecLO().error());
1820
1821 lInfo.externalXSNLO(aRunProd->externalXSecNLO().value(),
1822 aRunProd->externalXSecNLO().error());
1823
1824 lInfo.filterEff(aRunProd->filterEfficiency());
1825
1826 event_->generatorInfo(lInfo);
1827
1828 }
1829
1830 #include "FWCore/Framework/interface/MakerMacros.h"
1831 DEFINE_FWK_MODULE(HbbTreeMaker);
1832
1833