ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.29
Committed: Wed May 4 14:21:43 2011 UTC (14 years ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.28: +148 -6 lines
Log Message:
Some additional info for JPT jets: info on charged consituents

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