ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.31
Committed: Fri May 27 13:24:59 2011 UTC (13 years, 11 months ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.30: +41 -14 lines
Log Message:
Modify HbbTreeMaker to write jet energy uncertainty
Also modify renameCastorFiles.sh to remove 3 random characters in filename.

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 hltTagsElec_(pset.getParameter<std::vector<edm::InputTag> >("HLTTagsElectrons")),
106 hltTagsMu_(pset.getParameter<std::vector<edm::InputTag> >("HLTTagsMuons")),
107 hltTagsJet_(pset.getParameter<std::vector<edm::InputTag> >("HLTTagsJets"))
108 //processVec_(pset.getParameter<std::vector<std::string> >("ProcessVec"))
109 {//constructor
110
111 std::string JEC_PATH("CondFormats/JetMETObjects/data/");
112 edm::FileInPath fipCalo(JEC_PATH+"Jec10V3_Uncertainty_AK5Calo.txt");
113 edm::FileInPath fipPF(JEC_PATH+"Jec10V3_Uncertainty_AK5PF.txt");
114 edm::FileInPath fipJPT(JEC_PATH+"Jec10V3_Uncertainty_AK5JPT.txt");
115 jecUncCalo = new JetCorrectionUncertainty(fipCalo.fullPath());
116 jecUncPF = new JetCorrectionUncertainty(fipPF.fullPath());
117 jecUncJPT = new JetCorrectionUncertainty(fipJPT.fullPath());
118
119 }//constructor
120
121 HbbTreeMaker::~HbbTreeMaker()
122 {//destructor
123 delete jecUncCalo;
124 delete jecUncPF;
125 delete jecUncJPT;
126
127 }//destructor
128
129
130
131 void HbbTreeMaker::beginJob(){//beginJob
132
133
134 edm::Service<TFileService> lFileService;
135
136 TFileDirectory lDir = lFileService->mkdir("HbbAnalysis");
137
138 tree_ = lDir.make<TTree>("Tree","Tree");
139 tree_->Branch("HbbEvent","HbbAnalysis::HbbEvent",&event_);
140 event_ = new HbbEvent();
141
142 if (debug_) std::cout << "Initialising JetFlavour : " << std::endl;
143
144 lDir = lFileService->mkdir("JetFlavours");
145 jetFlav_.Initialise(lDir, debug_, flavour_);
146
147
148 }//beginJob
149
150 void HbbTreeMaker::endJob(){//endJob
151 if (!processData_) jetFlav_.printSummary();
152
153 //tree_->Write();
154 //delete tree_;
155 //delete event_;
156
157 }//endJob
158
159 void HbbTreeMaker::analyze(const edm::Event& aEvt, const edm::EventSetup& aEvtSetup){//analyze
160
161 //dumpContent(aEvt,"","MuTauPAT");
162 if (debug_) std::cout << "Processing event #" << aEvt.id().event() << std::endl;
163
164
165 static bool firstEvent = true;
166
167 event_->Clear();
168 event_->event(aEvt.id().event());
169 processData_ = aEvt.isRealData();
170
171 event_->run(aEvt.run());
172 event_->lumiBlock(aEvt.luminosityBlock());
173 event_->isRealData(aEvt.isRealData());
174 event_->bx(aEvt.bunchCrossing());
175
176 edm::Handle<reco::BeamSpot> lBeamSpot;
177 try {
178 aEvt.getByLabel(edm::InputTag("offlineBeamSpot"), lBeamSpot);
179 } catch(cms::Exception& e) {
180 std::cout<< "AMM: No beam spot found. Exception : " << e.what() << "." << std::endl;
181 }
182 HbbBeamSpot(lBeamSpot,event_->beamSpot());
183
184 //AJG - This will only work on RECO sample
185 /*
186 std::cout << "Beamspot = (" << lBeamSpot->x0() << "," << lBeamSpot->y0() << "," << lBeamSpot->z0() << ")" << std::endl;
187
188 edm::Handle<edm::SimVertexContainer> simVertexCollection;
189 aEvt.getByLabel("g4SimHits", simVertexCollection);
190 const edm::SimVertexContainer simVC = *(simVertexCollection.product());
191 std::cout << "SimVertexContainer size = " << simVC.size() << std::endl;
192 std::cout << "SimVertex[0] = (" << simVC.at(0).position().x() << ","
193 << simVC.at(0).position().y() << ","
194 << simVC.at(0).position().z() << ")" << std::endl;
195 */
196
197 if (!processData_) {
198 edm::Handle<edm::HepMCProduct> mcProd;
199 edm::Handle<GenRunInfoProduct> lRunProd;
200 try {
201 aEvt.getByLabel("generator", mcProd );
202 } catch(cms::Exception& e) {
203 std::cout << "AMM: Collection HepMCProduct not available! Exception : " << e.what() << ". " << std::endl;
204 }
205 try {
206 aEvt.getRun().getByLabel("generator",lRunProd);
207 } catch(cms::Exception& e) {
208 std::cout << "AMM: Collection GenInfoProduct not available! Exception : " << e.what() << ". " << std::endl;
209 }
210
211 //HbbGenInfo(mcProd,lRunProd);
212 }
213
214 edm::Handle<reco::GenParticleCollection> lGenParticles;
215 try {
216 aEvt.getByLabel(genParticleSrc_,lGenParticles);
217 if (debug_) std::cout << "** ngenParticles = " << lGenParticles->size() << std::endl;
218 } catch(cms::Exception& e) {
219 if (!processData_) std::cout << "AMM: Collection genParticles not available! Exception : " << e.what() << ". " << std::endl;
220 }
221
222 if (doGen_ && !processData_) HbbParticles(lGenParticles,event_->particles());
223
224 unsigned int lNPartons = 0;
225 if (!processData_) lNPartons = jetFlav_.fillPartons(lGenParticles);
226
227 if (debug_ && !processData_) std::cout << "--- Number of partons = " << lNPartons << "." << std::endl;
228
229
230 edm::Handle<std::vector<reco::Vertex> > lRecoVertices;
231 try {
232 aEvt.getByLabel(vertexSrc_, lRecoVertices);
233 if (!lRecoVertices.isValid()){
234 edm::LogInfo("ERROR")<< "Error! Can't get vertex by label. ";
235 }
236 if (debug_) std::cout << "** vertexcollection = " << lRecoVertices->size() << " elements." << std::endl;
237 } catch(cms::Exception& e) {
238 std::cout << "AMM: Collection " << vertexSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
239 }
240
241 HbbVertices(lRecoVertices,event_->vertices());
242
243 edm::Handle<std::vector<pat::Electron> > lElectronCollection;
244
245 try {
246 aEvt.getByLabel(electronSrc_,lElectronCollection);
247 if (!lElectronCollection.isValid()){
248 edm::LogInfo("ERROR")<< "Error! Can't get electron by label. ";
249 }
250 if (debug_) std::cout << "** electroncollection = " << lElectronCollection->size() << " elements." << std::endl;
251 } catch(cms::Exception& e) {
252 std::cout << "AMM: Collection " << electronSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
253 }
254
255 HbbElectrons(lElectronCollection,event_->electrons());
256
257 edm::Handle<std::vector<pat::Muon> > lMuonCollection;
258
259 try {
260 aEvt.getByLabel(muonSrc_,lMuonCollection);
261 if (!lMuonCollection.isValid()){
262 edm::LogInfo("ERROR")<< "Error! Can't get muon by label. ";
263 }
264 if (debug_) std::cout << "** muoncollection = " << lMuonCollection->size() << " elements." << std::endl;
265 } catch(cms::Exception& e) {
266 std::cout << "AMM: Collection " << muonSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
267 }
268
269 HbbMuons(lMuonCollection,lRecoVertices,lBeamSpot,event_->muons());
270
271
272 if (!( caloTauSrc_.label()=="" && caloTauSrc_.instance()=="" )) {
273 edm::Handle<std::vector<pat::Tau> > lTauCollection;
274
275 try {
276 aEvt.getByLabel(caloTauSrc_,lTauCollection);
277 if (!lTauCollection.isValid()){
278 edm::LogInfo("ERROR")<< "Error! Can't get caloTau by label. ";
279 }
280 if (debug_) std::cout << "** caloTaucollection = " << lTauCollection->size() << " elements." << std::endl;
281 } catch(cms::Exception& e) {
282 std::cout << "AMM: Collection " << caloTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
283 }
284
285 HbbTaus(lTauCollection,lRecoVertices,event_->caloTaus());
286 }
287
288 edm::Handle<std::vector<pat::Tau> > lPFTauCollection;
289
290 try {
291 aEvt.getByLabel(pfTauSrc_,lPFTauCollection);
292 if (!lPFTauCollection.isValid()){
293 edm::LogInfo("ERROR")<< "Error! Can't get pfTau by label. ";
294 }
295 if (debug_) std::cout << "** pfTaucollection = " << lPFTauCollection->size() << " elements." << std::endl;
296 } catch(cms::Exception& e) {
297 std::cout << "AMM: Collection " << pfTauSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
298 }
299
300 HbbTaus(lPFTauCollection,lRecoVertices,event_->pfTaus());
301
302 edm::Handle<std::vector<pat::Jet> > lCaloJetCollection;
303
304 try {
305 aEvt.getByLabel(caloJetSrc_,lCaloJetCollection);
306 if (!lCaloJetCollection.isValid()){
307 edm::LogInfo("ERROR")<< "Error! Can't get caloJets by label. ";
308 }
309 if (debug_) std::cout << "** caloJetcollection = " << lCaloJetCollection->size() << " elements." << std::endl;
310 } catch(cms::Exception& e) {
311 std::cout << "AMM: Collection " << caloJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
312 }
313
314 HbbJets(lCaloJetCollection,jetFlav_,lGenParticles,event_->caloJets());
315
316 //AJG - Process reco JPT Jet Corrections:
317 //This section should be uncommented for testing purposes
318
319 /*
320 edm::Handle<reco::JPTJetCollection > lJptRL2L3RESJetCollection;
321 edm::Handle<reco::JPTJetCollection > lJptRL1L2L3RESJetCollection;
322
323 edm::Handle<reco::JPTJetCollection > lJptRRAWJetCollection;
324 try {
325 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
326 if (!lJptRRAWJetCollection.isValid()){
327 edm::LogInfo("ERROR")<< "Error! Can't get JetPlusZSPCorJetAntiKt5 by label. ";
328 }
329 if (debug_) std::cout << "** jetPlusTrackZSPCorJetAntiKt5 = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
330 } catch(cms::Exception& e) {
331 std::cout << "AJG: Collection not available! Exception : " << e.what() << ". " << std::endl;
332 }
333
334 try {
335 aEvt.getByLabel("ak5JPTJetsL2L3Residual",lJptRL2L3RESJetCollection);
336 aEvt.getByLabel("JetPlusTrackZSPCorJetAntiKt5",lJptRRAWJetCollection);
337 aEvt.getByLabel("ak5JPTJetsL1L2L3Residual",lJptRL1L2L3RESJetCollection);
338 if (!lJptRRAWJetCollection.isValid()){
339 edm::LogInfo("ERROR")<< "Error! Can't get jptRecoJets by label. ";
340 }
341 if (debug_) std::cout << "** jptRecoJetcollection = " << lJptRRAWJetCollection->size() << " elements." << std::endl;
342 } catch(cms::Exception& e) {
343 std::cout << "AJG: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
344 }
345
346
347 for(reco::JPTJetCollection::const_iterator jptjet = lJptRRAWJetCollection->begin(); jptjet != lJptRRAWJetCollection->end(); ++jptjet ) {
348
349 std::cout << "pT = " << jptjet->pt() << std::endl;
350
351 reco::TrackRefVector tpionsInVInC = jptjet->getPionsInVertexInCalo();
352 std::cout << "Pion Track Count (reco) = " << tpionsInVInC.size() << std::endl;
353 }
354
355 reco::JPTJetCollection::const_iterator jptRAWjet = lJptRRAWJetCollection->begin();
356 reco::JPTJetCollection::const_iterator jptL2L3RESjet = lJptRL2L3RESJetCollection->begin();
357 reco::JPTJetCollection::const_iterator jptL1L2L3RESjet = lJptRL1L2L3RESJetCollection->begin();
358 std::cout << "pT RAW = " << jptRAWjet->pt() << std::endl;
359 std::cout << "pT L2L3RES = " << jptL2L3RESjet->pt() << std::endl;
360 std::cout << "pT L1L2L3RES = " << jptL1L2L3RESjet->pt() << std::endl;
361 */
362
363
364
365 edm::Handle<std::vector<pat::Jet> > lJptJetCollection;
366
367 try {
368 aEvt.getByLabel(jptJetSrc_,lJptJetCollection);
369 if (!lJptJetCollection.isValid()){
370 edm::LogInfo("ERROR")<< "Error! Can't get jptJets by label. ";
371 }
372 if (debug_) std::cout << "** jptJetcollection = " << lJptJetCollection->size() << " elements." << std::endl;
373 } catch(cms::Exception& e) {
374 std::cout << "AMM: Collection " << jptJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
375 }
376
377 //std::cout << "Processing JPT jets:" << std::endl;
378 HbbJets(lJptJetCollection,jetFlav_,lGenParticles,event_->jptJets());
379
380 edm::Handle<std::vector<pat::Jet> > lAk7JetCollection;
381
382 try {
383 aEvt.getByLabel(ak7JetSrc_,lAk7JetCollection);
384 if (!lAk7JetCollection.isValid()){
385 edm::LogInfo("ERROR")<< "Error! Can't get ak7Jets by label. ";
386 }
387 if (debug_) std::cout << "** ak7Jetcollection = " << lAk7JetCollection->size() << " elements." << std::endl;
388 } catch(cms::Exception& e) {
389 std::cout << "AMM: Collection " << ak7JetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
390 }
391
392 //std::cout << "Processing JPT jets:" << std::endl;
393 HbbJets(lAk7JetCollection,jetFlav_,lGenParticles,event_->ak7Jets());
394
395 edm::Handle<std::vector<pat::Jet> > lPfJetCollection;
396
397 try {
398 aEvt.getByLabel(pfJetSrc_,lPfJetCollection);
399 if (!lPfJetCollection.isValid()){
400 edm::LogInfo("ERROR")<< "Error! Can't get pfJets by label. ";
401 }
402 if (debug_) std::cout << "** pfJetcollection = " << lPfJetCollection->size() << " elements." << std::endl;
403 } catch(cms::Exception& e) {
404 std::cout << "AMM: Collection " << pfJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
405 }
406
407 //std::cout << "Processing PF jets:" << std::endl;
408 HbbJets(lPfJetCollection,jetFlav_,lGenParticles,event_->pfJets());
409
410 edm::Handle<std::vector<pat::MET> > lCaloMetCol;
411
412 try {
413 aEvt.getByLabel(caloMetSrc_,lCaloMetCol);
414 if (!lCaloMetCol.isValid()){
415 edm::LogInfo("ERROR")<< "Error! Can't get caloMet by label. ";
416 }
417 if (debug_) std::cout << "** caloMet = " << lCaloMetCol->size() << " elements." << std::endl;
418 } catch(cms::Exception& e) {
419 std::cout << "AMM: Collection " << caloMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
420 }
421
422 HbbMet(lCaloMetCol,event_->caloMet());
423
424 edm::Handle<std::vector<pat::MET> > lTcMetCol;
425
426 try {
427 aEvt.getByLabel(tcMetSrc_,lTcMetCol);
428 if (!lTcMetCol.isValid()){
429 edm::LogInfo("ERROR")<< "Error! Can't get tcMet by label. ";
430 }
431 if (debug_) std::cout << "** tcMet = " << lTcMetCol->size() << " elements." << std::endl;
432 } catch(cms::Exception& e) {
433 std::cout << "AMM: Collection " << tcMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
434 }
435
436 HbbMet(lTcMetCol,event_->tcMet());
437
438 edm::Handle<std::vector<pat::MET> > lPfMetCol;
439
440 try {
441 aEvt.getByLabel(pfMetSrc_,lPfMetCol);
442 if (!lPfMetCol.isValid()){
443 edm::LogInfo("ERROR")<< "Error! Can't get pfMet by label. ";
444 }
445 if (debug_) std::cout << "** pfMet = " << lPfMetCol->size() << " elements." << std::endl;
446 } catch(cms::Exception& e) {
447 std::cout << "AMM: Collection " << pfMetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
448 }
449
450 HbbMet(lPfMetCol,event_->pfMet());
451
452
453
454 //triggers
455 edm::Handle<edm::TriggerResults> lTrigCol;
456 try {
457 aEvt.getByLabel(triggerSrc_,lTrigCol);
458 if (!lTrigCol.isValid()){
459 edm::LogInfo("ERROR")<< "Error! Can't get triggers by label. ";
460 }
461 if (debug_) std::cout << "** triggers = " << lTrigCol->size() << std::endl;
462 } catch(cms::Exception& e) {
463 std::cout << "AMM: Collection " << triggerSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
464 }
465 if (lTrigCol.isValid()) {
466 const edm::TriggerNames & lNames = aEvt.triggerNames(*lTrigCol);
467 HbbTrigger(lTrigCol,lNames,event_->triggers());
468 }
469
470 //L1 jet objects
471
472 edm::Handle<l1extra::L1JetParticleCollection> lCenJet;
473 edm::Handle<l1extra::L1JetParticleCollection> lFwdJet;
474 edm::Handle<l1extra::L1JetParticleCollection> lTauJet;
475 try {
476 aEvt.getByLabel(l1CenJetSrc_,lCenJet);
477 aEvt.getByLabel(l1TauJetSrc_,lTauJet);
478 aEvt.getByLabel(l1FwdJetSrc_,lFwdJet);
479 } catch(cms::Exception& e) {
480 std::cout << "AMM: L1 Collections " << l1CenJetSrc_ << ", " << l1TauJetSrc_ << ", " << l1FwdJetSrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
481 }
482 if (lCenJet.isValid()) {
483 HbbL1Objects(lCenJet,event_->l1Jets(),1);
484 }
485 if (lTauJet.isValid()) {
486 HbbL1Objects(lTauJet,event_->l1Jets(),2);
487 }
488 if (lFwdJet.isValid()) {
489 HbbL1Objects(lFwdJet,event_->l1Jets(),3);
490 }
491
492
493 edm::Handle<trigger::TriggerEvent> lHltSummary;
494 try {
495 aEvt.getByLabel(hltSummarySrc_,lHltSummary);
496 } catch(cms::Exception& e) {
497 std::cout << "AMM: collection " << hltSummarySrc_ << " not available! Exception : " << e.what() << ". " << std::endl;
498 }
499 if (lHltSummary.isValid()) {
500 HbbHLTObjects(lHltSummary,event_->hltObjects());
501 }
502
503
504
505 //event_->order();
506 tree_->Fill();
507 firstEvent = false;
508
509 }//analyze
510
511
512 void HbbTreeMaker::HbbBeamSpot(const edm::Handle<reco::BeamSpot> & aBeamSpot,
513 HbbAnalysis::BeamSpot & aBS)
514 {
515
516 if (aBeamSpot.isValid()) {
517 HbbAnalysis::BeamSpotVars lbs;
518 lbs.x0 = aBeamSpot->x0();
519 lbs.y0 = aBeamSpot->y0();
520 lbs.z0 = aBeamSpot->z0();
521 lbs.sigmaZ = aBeamSpot->sigmaZ();
522 lbs.BeamWidthX = aBeamSpot->BeamWidthX();
523 lbs.BeamWidthY = aBeamSpot->BeamWidthY();
524 lbs.x0Error = aBeamSpot->x0Error();
525 lbs.y0Error = aBeamSpot->y0Error();
526 lbs.z0Error = aBeamSpot->z0Error();
527 lbs.sigmaZ0Error = aBeamSpot->sigmaZ0Error();
528 lbs.BeamWidthXError = aBeamSpot->BeamWidthXError();
529 lbs.BeamWidthYError = aBeamSpot->BeamWidthYError();
530
531 aBS.bsVars(lbs);
532 }
533
534 }
535
536
537 void HbbTreeMaker::HbbElectrons(const edm::Handle<std::vector<pat::Electron> > & aCol,
538 std::vector<HbbAnalysis::Electron> & aVec)
539 {//HbbElectrons
540
541 if (aCol.isValid()){
542 if (aCol->size() > 0) {
543
544 unsigned int iEle = 0;
545 for (std::vector<pat::Electron>::const_iterator iter = aCol->begin();
546 iter != aCol->end();
547 ++iter,++iEle)
548 {
549 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
550 // get the track collection
551
552
553
554 // define your function for WPXX using relative or absolute isolations
555 SimpleCutBasedElectronIDSelectionFunctor patSeleR95(SimpleCutBasedElectronIDSelectionFunctor::relIso95);
556 SimpleCutBasedElectronIDSelectionFunctor patSeleR90(SimpleCutBasedElectronIDSelectionFunctor::relIso90);
557 SimpleCutBasedElectronIDSelectionFunctor patSeleR85(SimpleCutBasedElectronIDSelectionFunctor::relIso85);
558 SimpleCutBasedElectronIDSelectionFunctor patSeleR80(SimpleCutBasedElectronIDSelectionFunctor::relIso80);
559 SimpleCutBasedElectronIDSelectionFunctor patSeleR70(SimpleCutBasedElectronIDSelectionFunctor::relIso70);
560 SimpleCutBasedElectronIDSelectionFunctor patSeleR60(SimpleCutBasedElectronIDSelectionFunctor::relIso60);
561 SimpleCutBasedElectronIDSelectionFunctor patSeleC95(SimpleCutBasedElectronIDSelectionFunctor::cIso95);
562 SimpleCutBasedElectronIDSelectionFunctor patSeleC90(SimpleCutBasedElectronIDSelectionFunctor::cIso90);
563 SimpleCutBasedElectronIDSelectionFunctor patSeleC85(SimpleCutBasedElectronIDSelectionFunctor::cIso85);
564 SimpleCutBasedElectronIDSelectionFunctor patSeleC80(SimpleCutBasedElectronIDSelectionFunctor::cIso80);
565 SimpleCutBasedElectronIDSelectionFunctor patSeleC70(SimpleCutBasedElectronIDSelectionFunctor::cIso70);
566 SimpleCutBasedElectronIDSelectionFunctor patSeleC60(SimpleCutBasedElectronIDSelectionFunctor::cIso60);
567
568
569 HbbAnalysis::GenVars lGen;
570 if (!processData_ && (*iter).genLepton()){
571 lGen.valid = true;
572 lGen.E = (*iter).genLepton()->energy();
573 lGen.pT = (*iter).genLepton()->pt();
574 lGen.eta = (*iter).genLepton()->eta();
575 lGen.y = (*iter).genLepton()->y();
576 lGen.phi = (*iter).genLepton()->phi();
577 lGen.charge = (*iter).genLepton()->charge();
578 lGen.pdgId = (*iter).genLepton()->pdgId();
579 lGen.status = (*iter).genLepton()->status();
580 lGen.mass = (*iter).genLepton()->mass();
581 lGen.vx = (*iter).genLepton()->vx();
582 lGen.vy = (*iter).genLepton()->vy();
583 lGen.vz = (*iter).genLepton()->vz();
584 }
585 else {
586 lGen.valid = false;
587 lGen.E = 0;
588 lGen.pT = 0;
589 lGen.eta = 0;
590 lGen.y = 0;
591 lGen.phi = 0;
592 lGen.charge = 0;
593 lGen.pdgId = 0;
594 lGen.status = 0;
595 lGen.mass = 0;
596 lGen.vx = 0;
597 lGen.vy = 0;
598 lGen.vz = 0;
599 }
600
601 HbbAnalysis::BaseVars lReco;
602 lReco.E = (*iter).energy();
603 lReco.pT = (*iter).pt();
604 lReco.eta = (*iter).eta();
605 lReco.y = (*iter).y();
606 lReco.phi = (*iter).phi();
607 lReco.charge = (*iter).charge();
608 lReco.vx = (*iter).vx();
609 lReco.vy = (*iter).vy();
610 lReco.vz = (*iter).vz();
611
612 HbbAnalysis::SCVars lSC;
613 lSC.sigmaEtaEta = (*iter).scSigmaEtaEta();
614 lSC.sigmaIEtaIEta = (*iter).scSigmaIEtaIEta();
615 lSC.e1x5 = (*iter).scE1x5();
616 lSC.e2x5Max = (*iter).scE2x5Max();
617 lSC.e5x5 = (*iter).scE5x5();
618 lSC.eOverP = (*iter).eSuperClusterOverP();
619
620 HbbAnalysis::EleIsoVars lIso;
621 lIso.calo = (*iter).caloIso();
622 lIso.track = (*iter).trackIso();
623 lIso.ecal = (*iter).ecalIso();
624 lIso.hcal = (*iter).hcalIso();
625
626 HbbAnalysis::EleIDVars lID;
627 lID.idAndIso =
628 (patSeleR95(*iter)<<11) | (patSeleR90(*iter)<<10) |
629 (patSeleR85(*iter)<<9) | (patSeleR80(*iter)<<8) |
630 (patSeleR70(*iter)<<7) | (patSeleR60(*iter)<<6) |
631 (patSeleC95(*iter)<<5) | (patSeleC90(*iter)<<4) |
632 (patSeleC85(*iter)<<3) | (patSeleC80(*iter)<<2) |
633 (patSeleC70(*iter)<<1) | (patSeleC60(*iter));
634 lID.electronIDs = (*iter).electronIDs();
635 lID.hOverE = (*iter).hadronicOverEm();
636 lID.deltaPhiIn = (*iter).deltaPhiSuperClusterTrackAtVtx();
637 lID.deltaEtaIn = (*iter).deltaEtaSuperClusterTrackAtVtx();
638 lID.ecalDrivenSeed = (*iter).ecalDrivenSeed();
639 lID.trackerDrivenSeed = (*iter).trackerDrivenSeed();
640
641 HbbAnalysis::Electron lObj(lGen,lReco,lSC,lIso,lID);
642 aVec.push_back(lObj);
643 }
644 }
645 }
646
647 }//HbbElectrons
648
649
650 void HbbTreeMaker::HbbMuons(const edm::Handle<std::vector<pat::Muon> > & aCol,
651 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
652 const edm::Handle<reco::BeamSpot> & aBeamSpot,
653 std::vector<HbbAnalysis::Muon> & aVec)
654 {//HbbMuons
655
656 if (aCol.isValid()){
657 if (aCol->size() > 0) {
658
659 unsigned int iEle = 0;
660 for (std::vector<pat::Muon>::const_iterator iter = aCol->begin();
661 iter != aCol->end();
662 ++iter,++iEle)
663 {
664 const reco::Muon* recoMuon = dynamic_cast<const reco::Muon*>((*iter).originalObject());
665
666 //select only global and tracker muons
667 if (!recoMuon->isGlobalMuon() || !recoMuon->isTrackerMuon()) continue;
668
669 HbbAnalysis::GenVars lGen;
670 if (!processData_ && (*iter).genLepton()){
671 lGen.valid = true;
672 lGen.E = (*iter).genLepton()->energy();
673 lGen.pT = (*iter).genLepton()->pt();
674 lGen.eta = (*iter).genLepton()->eta();
675 lGen.y = (*iter).genLepton()->y();
676 lGen.phi = (*iter).genLepton()->phi();
677 lGen.charge = (*iter).genLepton()->charge();
678 lGen.pdgId = (*iter).genLepton()->pdgId();
679 lGen.status = (*iter).genLepton()->status();
680 lGen.mass = (*iter).genLepton()->mass();
681 lGen.vx = (*iter).genLepton()->vx();
682 lGen.vy = (*iter).genLepton()->vy();
683 lGen.vz = (*iter).genLepton()->vz();
684 }
685 else {
686 lGen.valid = false;
687 lGen.E = 0;
688 lGen.pT = 0;
689 lGen.eta = 0;
690 lGen.y = 0;
691 lGen.phi = 0;
692 lGen.charge = 0;
693 lGen.pdgId = 0;
694 lGen.status = 0;
695 lGen.mass = 0;
696 lGen.vx = 0;
697 lGen.vy = 0;
698 lGen.vz = 0;
699 }
700
701 HbbAnalysis::BaseVars lReco;
702 lReco.E = (*iter).energy();
703 lReco.pT = (*iter).pt();
704 lReco.eta = (*iter).eta();
705 lReco.y = (*iter).y();
706 lReco.phi = (*iter).phi();
707 lReco.charge = (*iter).charge();
708 lReco.vx = (*iter).vx();
709 lReco.vy = (*iter).vy();
710 lReco.vz = (*iter).vz();
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
798 HbbAnalysis::Muon lObj(lGen,lReco,lTrk,lIsoR03,lIsoR05,lID);
799 aVec.push_back(lObj);
800 }
801 }
802 }
803
804 }//HbbMuons
805
806 void HbbTreeMaker::HbbTaus(const edm::Handle<std::vector<pat::Tau> > & aCol,
807 const edm::Handle<std::vector<reco::Vertex> > & aRecoVertices,
808 std::vector<HbbAnalysis::Tau> & aVec)
809 {//HbbTaus
810
811 if (aCol.isValid()){
812 if (aCol->size() > 0) {
813
814 unsigned int iEle = 0;
815 for (std::vector<pat::Tau>::const_iterator iter = aCol->begin();
816 iter != aCol->end();
817 ++iter,++iEle)
818 {
819 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
820
821 HbbAnalysis::GenVars lGen;
822 if (!processData_ && (*iter).genLepton()){
823 lGen.valid = true;
824 lGen.E = (*iter).genLepton()->energy();
825 lGen.pT = (*iter).genLepton()->pt();
826 lGen.eta = (*iter).genLepton()->eta();
827 lGen.y = (*iter).genLepton()->y();
828 lGen.phi = (*iter).genLepton()->phi();
829 lGen.charge = (*iter).genLepton()->charge();
830 lGen.pdgId = (*iter).genLepton()->pdgId();
831 lGen.status = (*iter).genLepton()->status();
832 lGen.mass = (*iter).genLepton()->mass();
833 lGen.vx = (*iter).genLepton()->vx();
834 lGen.vy = (*iter).genLepton()->vy();
835 lGen.vz = (*iter).genLepton()->vz();
836 }
837 else {
838 lGen.valid = false;
839 lGen.E = 0;
840 lGen.pT = 0;
841 lGen.eta = 0;
842 lGen.y = 0;
843 lGen.phi = 0;
844 lGen.charge = 0;
845 lGen.pdgId = 0;
846 lGen.status = 0;
847 lGen.mass = 0;
848 lGen.vx = 0;
849 lGen.vy = 0;
850 lGen.vz = 0;
851 }
852
853
854 HbbAnalysis::GenVars lGenJet;
855 if (!processData_ && (*iter).genJet()){
856 lGenJet.valid = true;
857 lGenJet.E = (*iter).genJet()->energy();
858 lGenJet.pT = (*iter).genJet()->pt();
859 lGenJet.eta = (*iter).genJet()->eta();
860 lGenJet.y = (*iter).genJet()->y();
861 lGenJet.phi = (*iter).genJet()->phi();
862 lGenJet.charge = (*iter).genJet()->charge();
863 lGenJet.pdgId = (*iter).genJet()->pdgId();
864 lGenJet.status = (*iter).genJet()->status();
865 lGenJet.mass = (*iter).genJet()->mass();
866 lGenJet.vx = (*iter).genJet()->vx();
867 lGenJet.vy = (*iter).genJet()->vy();
868 lGenJet.vz = (*iter).genJet()->vz();
869 }
870 else {
871 lGenJet.valid = false;
872 lGenJet.E = 0;
873 lGenJet.pT = 0;
874 lGenJet.eta = 0;
875 lGenJet.y = 0;
876 lGenJet.phi = 0;
877 lGenJet.charge = 0;
878 lGenJet.pdgId = 0;
879 lGenJet.status = 0;
880 lGenJet.mass = 0;
881 lGenJet.vx = 0;
882 lGenJet.vy = 0;
883 lGenJet.vz = 0;
884 }
885
886 HbbAnalysis::BaseVars lReco;
887 lReco.E = (*iter).energy();
888 lReco.pT = (*iter).pt();
889 lReco.eta = (*iter).eta();
890 lReco.y = (*iter).y();
891 lReco.phi = (*iter).phi();
892 lReco.charge = (*iter).charge();
893 lReco.vx = (*iter).vx();
894 lReco.vy = (*iter).vy();
895 lReco.vz = (*iter).vz();
896
897 bool isCalo = (*iter).isCaloTau();
898 bool isPF = (*iter).isPFTau();
899
900 assert (isCalo == !isPF);
901
902 HbbAnalysis::TrkVars lLead;
903 if (isCalo) {
904 lLead.signedSipt = (*iter).leadTracksignedSipt();
905
906 reco::TrackRef lCaloTrk = (*iter).leadTrack();
907
908 if ( lCaloTrk.isAvailable() && lCaloTrk.isNonnull() ) {
909 lLead.pT = lCaloTrk->pt();
910 lLead.eta = lCaloTrk->eta();
911 lLead.phi = lCaloTrk->phi();
912
913 lLead.matchDist = reco::deltaR(lCaloTrk->momentum(), (*iter).p4());
914
915 if ( aRecoVertices->size() >= 1 ) {
916 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
917 lLead.IPxy = lCaloTrk->dxy(thePrimaryEventVertex.position());
918 lLead.IPz = lCaloTrk->dz(thePrimaryEventVertex.position());
919 }
920 else {
921 lLead.IPxy = 0;
922 lLead.IPz = 0;
923 }
924 }
925 else {
926 lLead.pT = 0;
927 lLead.eta = 0;
928 lLead.phi = 0;
929 lLead.matchDist = 0;
930 lLead.IPxy = 0;
931 lLead.IPz = 0;
932 lLead.signedSipt = 0;
933 }
934 }//calo
935 else {
936 lLead.signedSipt = (*iter).leadPFChargedHadrCandsignedSipt();
937
938 reco::PFCandidateRef lHadrCand = (*iter).leadPFChargedHadrCand();
939
940 if ( lHadrCand.isAvailable() && lHadrCand.isNonnull() ) {
941 lLead.pT = lHadrCand->pt();
942 lLead.eta = lHadrCand->eta();
943 lLead.phi = lHadrCand->phi();
944
945 lLead.matchDist = reco::deltaR(lHadrCand->p4(), (*iter).p4());
946
947 reco::TrackRef lTrk = lHadrCand->trackRef();
948
949 if ( aRecoVertices->size() >= 1) {
950 const reco::Vertex& thePrimaryEventVertex = (*aRecoVertices->begin());
951 lLead.IPxy = lTrk->dxy(thePrimaryEventVertex.position());
952 lLead.IPz = lTrk->dz(thePrimaryEventVertex.position());
953 }
954 else {
955 lLead.IPxy = 0;
956 lLead.IPz = 0;
957 }
958 }
959 else {
960 lLead.pT = 0;
961 lLead.eta = 0;
962 lLead.phi = 0;
963 lLead.matchDist = 0;
964 lLead.IPxy = 0;
965 lLead.IPz = 0;
966 lLead.signedSipt = 0;
967 }
968
969 }//pf
970
971
972
973 const std::vector<std::pair<std::string,float> > & lIDs = (*iter).tauIDs();
974 bool lPrint = false;
975 //a few warning if additional discriminants are found:
976 if ((isPF && lIDs.size() != 16) ||
977 (isCalo && lIDs.size() != 3))
978 lPrint = true;
979
980 if (lPrint) {
981 std::cout << "!!!!!!! Discriminants changed, please update tree !!!!!!!" << std::endl;
982 std::cout << "--- isCaloTau = " << isCalo << ", isPFTau = " << isPF << std::endl;
983 std::cout << "------ ID names = " << std::endl;
984 }
985
986
987 HbbAnalysis::CaloTauIDVars lcaloId;
988 lcaloId.byIsolation = 0;
989 lcaloId.byLeadingTrackFinding = 0;
990 lcaloId.byLeadingTrackPtCut = 0;
991
992 HbbAnalysis::PFTauIDVars lpfId;
993 lpfId.byLeadingTrackFinding = 0;
994 lpfId.byLeadingTrackPtCut = 0;
995 lpfId.byTrackIsolation = 0;
996 lpfId.byECALIsolation = 0;
997 lpfId.byIsolation = 0;
998 lpfId.againstElectron = 0;
999 lpfId.againstMuon = 0;
1000 lpfId.byIsolationUsingLeadingPion = 0;
1001 lpfId.byTaNC = 0;
1002 lpfId.byTaNCfrHalfPercent = 0;
1003 lpfId.byTaNCfrOnePercent = 0;
1004 lpfId.byTaNCfrQuarterPercent = 0;
1005 lpfId.byTaNCfrTenthPercent = 0;
1006 lpfId.ecalIsolationUsingLeadingPion = 0;
1007 lpfId.leadingPionPtCut = 0;
1008 lpfId.trackIsolationUsingLeadingPion = 0;
1009
1010
1011
1012 for (unsigned int id(0); id<lIDs.size(); ++id){
1013
1014 std::string lName = lIDs.at(id).first;
1015 float lDiscri = lIDs.at(id).second;
1016
1017 if (lPrint) std::cout << "--------- " << lName << " = " << lDiscri << std::endl;
1018 //pf
1019
1020 if (isPF) {
1021 if (lName.find("leadingTrackFinding") != lName.npos) lpfId.byLeadingTrackFinding = lDiscri;
1022 if (lName.find("leadingTrackPtCut") != lName.npos) lpfId.byLeadingTrackPtCut = lDiscri;
1023 if (lName.find("trackIsolationUsingLeadingPion") != lName.npos) lpfId.trackIsolationUsingLeadingPion = lDiscri;
1024 if (lName.find("trackIsolation") != lName.npos &&
1025 lName.find("trackIsolationUsingLeadingPion") == lName.npos) lpfId.byTrackIsolation = lDiscri;
1026 if (lName.find("ecalIsolationUsingLeadingPion") != lName.npos) lpfId.ecalIsolationUsingLeadingPion = lDiscri;
1027 if (lName.find("ecalIsolation") != lName.npos &&
1028 lName.find("ecalIsolationUsingLeadingPion") == lName.npos) lpfId.byECALIsolation = lDiscri;
1029 if (lName.find("byIsolationUsingLeadingPion") != lName.npos) lpfId.byIsolationUsingLeadingPion = lDiscri;
1030 if (lName.find("byIsolation") != lName.npos &&
1031 lName.find("byIsolationUsingLeadingPion") == lName.npos) lpfId.byIsolation = lDiscri;
1032 if (lName.find("againstElectron") != lName.npos) lpfId.againstElectron = lDiscri;
1033 if (lName.find("againstMuon") != lName.npos) lpfId.againstMuon = lDiscri;
1034 if (lName.find("byTaNCfrHalfPercent") != lName.npos) lpfId.byTaNCfrHalfPercent = lDiscri;
1035 if (lName.find("byTaNCfrOnePercent") != lName.npos) lpfId.byTaNCfrOnePercent = lDiscri;
1036 if (lName.find("byTaNCfrQuarterPercent") != lName.npos) lpfId.byTaNCfrQuarterPercent = lDiscri;
1037 if (lName.find("byTaNCfrTenthPercent") != lName.npos) lpfId.byTaNCfrTenthPercent = lDiscri;
1038 if (lName.find("byTaNC") != lName.npos &&
1039 lName.find("byTaNCfr") == lName.npos) lpfId.byTaNC = lDiscri;
1040 if (lName.find("leadingPionPtCut") != lName.npos) lpfId.leadingPionPtCut = lDiscri;
1041 }
1042 if (isCalo){
1043 if (lName.find("byIsolation") != lName.npos) lcaloId.byIsolation = lDiscri;
1044 if (lName.find("leadingTrackFinding") != lName.npos) lcaloId.byLeadingTrackFinding = lDiscri;
1045 if (lName.find("leadingTrackPtCut") != lName.npos) lcaloId.byLeadingTrackPtCut = lDiscri;
1046 }
1047
1048
1049 }
1050
1051
1052 if (isCalo){
1053
1054 HbbAnalysis::CaloTauIsoVars lcaloIso;
1055 lcaloIso.nIsoTracks = (*iter).isolationTracks().size();
1056 lcaloIso.nSigTracks = (*iter).signalTracks().size();
1057 lcaloIso.leadTrackHCAL3x3hitsEtSum = (*iter).leadTrackHCAL3x3hitsEtSum();
1058 lcaloIso.leadTrackHCAL3x3hottesthitDEta = (*iter).leadTrackHCAL3x3hottesthitDEta();
1059 lcaloIso.signalTracksInvariantMass = (*iter).signalTracksInvariantMass();
1060 lcaloIso.tracksInvariantMass = (*iter).TracksInvariantMass();
1061 lcaloIso.isolationTracksPtSum = (*iter).isolationTracksPtSum();
1062 lcaloIso.isolationECALhitsEtSum = (*iter).isolationECALhitsEtSum();
1063 lcaloIso.maximumHCALhitEt = (*iter).maximumHCALhitEt();
1064
1065 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lcaloIso,lcaloId);
1066 aVec.push_back(lObj);
1067 }
1068 else {
1069
1070 HbbAnalysis::PFTauIsoVars lpfIso;
1071 lpfIso.nSigCands = (*iter).signalPFCands().size();
1072 lpfIso.nIsoCands = (*iter).isolationPFCands().size();
1073 lpfIso.maximumHCALPFClusterEt = (*iter).maximumHCALPFClusterEt();
1074 //lpfIso.emFraction = (*iter).emFraction();
1075 lpfIso.hcalTotOverPLead = (*iter).hcalTotOverPLead();
1076 lpfIso.hcalMaxOverPLead = (*iter).hcalMaxOverPLead();
1077 lpfIso.hcal3x3OverPLead = (*iter).hcal3x3OverPLead();
1078 lpfIso.ecalStripSumEOverPLead = (*iter).ecalStripSumEOverPLead();
1079 lpfIso.bremsRecoveryEOverPLead = (*iter).bremsRecoveryEOverPLead();
1080
1081 HbbAnalysis::PFTauCandVars lHadr;
1082 lHadr.nSigCands = (*iter).signalPFChargedHadrCands().size();
1083 lHadr.nIsoCands = (*iter).isolationPFChargedHadrCands().size();
1084 lHadr.isolationPtSum = (*iter).isolationPFChargedHadrCandsPtSum();
1085
1086 HbbAnalysis::PFTauCandVars lNeutr;
1087 lNeutr.nSigCands = (*iter).signalPFNeutrHadrCands().size();
1088 lNeutr.nIsoCands = (*iter).isolationPFNeutrHadrCands().size();
1089 lNeutr.isolationPtSum = (*iter).neutralHadronIso();
1090
1091 HbbAnalysis::PFTauCandVars lGamma;
1092 lGamma.nSigCands = (*iter).signalPFGammaCands().size();
1093 lGamma.nIsoCands = (*iter).isolationPFGammaCands().size();
1094 lGamma.isolationPtSum = (*iter).isolationPFGammaCandsEtSum();
1095
1096 HbbAnalysis::PFTauEleIDVars lEleId;
1097 if ( (*iter).electronPreIDTrack().isAvailable() && (*iter).electronPreIDTrack().isNonnull() ) {
1098 lEleId.pT = (*iter).electronPreIDTrack()->pt();
1099 lEleId.eta = (*iter).electronPreIDTrack()->eta();
1100 lEleId.phi = (*iter).electronPreIDTrack()->phi();
1101 }
1102 else {
1103 lEleId.pT = 0;
1104 lEleId.eta = 0;
1105 lEleId.phi = 0;
1106 }
1107
1108 lEleId.output = (*iter).electronPreIDOutput();
1109 lEleId.decision = (*iter).electronPreIDDecision();
1110
1111 HbbAnalysis::PFTauMuIDVars lMuId;
1112 lMuId.caloCompat = (*iter).caloComp();
1113 lMuId.segCompat = (*iter).segComp();
1114 lMuId.decision = (*iter).muonDecision();
1115
1116 HbbAnalysis::Tau lObj(lGen,lGenJet,lReco,lLead,lpfIso,lHadr,lNeutr,lGamma,lpfId,lEleId,lMuId);
1117 aVec.push_back(lObj);
1118 }
1119 }
1120 }
1121 }
1122
1123 }//HbbTaus
1124
1125 void HbbTreeMaker::HbbJets(const edm::Handle<std::vector<pat::Jet> > & aCol,
1126 const HbbAnalysis::JetFlavour & aJetFlav,
1127 const edm::Handle<reco::GenParticleCollection> & aGenParticles,
1128 std::vector<HbbAnalysis::Jet> & aVec)
1129 {//HbbJets
1130
1131 if (aCol.isValid()){//valid
1132 if (aCol->size() > 0) {//non empty
1133
1134 unsigned int iEle = 0;
1135 for (std::vector<pat::Jet>::const_iterator iter = aCol->begin();
1136 iter != aCol->end();
1137 ++iter,++iEle)
1138 {//loop on element
1139 //if (debug_ > 1) std::cout << "**** Ele #" << iEle << ", pT,eta,phi = " << (*iter).pt() << " " << (*iter).eta() << " " << (*iter).phi() << std::endl;
1140
1141 HbbAnalysis::GenVars lGen;
1142 if (!processData_ && (*iter).genParton()){
1143 lGen.valid = true;
1144 lGen.E = (*iter).genParton()->energy();
1145 lGen.pT = (*iter).genParton()->pt();
1146 lGen.eta = (*iter).genParton()->eta();
1147 lGen.y = (*iter).genParton()->y();
1148 lGen.phi = (*iter).genParton()->phi();
1149 lGen.charge = (*iter).genParton()->charge();
1150 lGen.pdgId = (*iter).genParton()->pdgId();
1151 lGen.status = (*iter).genParton()->status();
1152 lGen.mass = (*iter).genParton()->mass();
1153 lGen.vx = (*iter).genParton()->vx();
1154 lGen.vy = (*iter).genParton()->vy();
1155 lGen.vz = (*iter).genParton()->vz();
1156 }
1157 else {
1158 lGen.valid = false;
1159 lGen.E = 0;
1160 lGen.pT = 0;
1161 lGen.eta = 0;
1162 lGen.y = 0;
1163 lGen.phi = 0;
1164 lGen.charge = 0;
1165 lGen.pdgId = 0;
1166 lGen.status = 0;
1167 lGen.mass = 0;
1168 lGen.vx = 0;
1169 lGen.vy = 0;
1170 lGen.vz = 0;
1171 }
1172
1173
1174 HbbAnalysis::GenVars lGenJet;
1175 if (!processData_ && (*iter).genJet()){
1176 lGenJet.valid = true;
1177 lGenJet.E = (*iter).genJet()->energy();
1178 lGenJet.pT = (*iter).genJet()->pt();
1179 lGenJet.eta = (*iter).genJet()->eta();
1180 lGenJet.y = (*iter).genJet()->y();
1181 lGenJet.phi = (*iter).genJet()->phi();
1182 lGenJet.charge = (*iter).genJet()->charge();
1183 lGenJet.pdgId = (*iter).genJet()->pdgId();
1184 lGenJet.status = (*iter).genJet()->status();
1185 lGenJet.mass = (*iter).genJet()->mass();
1186 lGenJet.vx = (*iter).genJet()->vx();
1187 lGenJet.vy = (*iter).genJet()->vy();
1188 lGenJet.vz = (*iter).genJet()->vz();
1189 }
1190 else {
1191 lGenJet.valid = false;
1192 lGenJet.E = 0;
1193 lGenJet.pT = 0;
1194 lGenJet.eta = 0;
1195 lGenJet.y = 0;
1196 lGenJet.phi = 0;
1197 lGenJet.charge = 0;
1198 lGenJet.pdgId = 0;
1199 lGenJet.status = 0;
1200 lGenJet.mass = 0;
1201 lGenJet.vx = 0;
1202 lGenJet.vy = 0;
1203 lGenJet.vz = 0;
1204 }
1205
1206 HbbAnalysis::BaseVars lReco;
1207 lReco.E = (*iter).energy();
1208 lReco.pT = (*iter).pt();
1209 lReco.eta = (*iter).eta();
1210 //lReco.etaDet = (*iter).detectorEta((*iter).vz(),(*iter).eta());
1211 lReco.y = (*iter).y();
1212 lReco.phi = (*iter).phi();
1213 lReco.charge = (*iter).jetCharge();
1214 lReco.vx = (*iter).vx();
1215 lReco.vy = (*iter).vy();
1216 lReco.vz = (*iter).vz();
1217 //lReco.myEtaDet = HbbAnalysis::EtaDetector(lReco);
1218
1219 unsigned int lFlav = 0;
1220 if (!processData_ && aJetFlav.nPartons()) {
1221 lFlav = aJetFlav.partonMatchingGenJet((*iter),aGenParticles,0.4).second;
1222 }
1223
1224 HbbAnalysis::JetVars lCommon;
1225 lCommon.flavour = lFlav;
1226 lCommon.partonFlavour = (*iter).partonFlavour();
1227 lCommon.nAssociatedTracks = ((*iter).associatedTracks()).size();
1228 lCommon.rawpT = (*iter).pt();
1229 //if ((*iter).hasCorrFactors() && (*iter).corrFactor("raw")>0)
1230 //lCommon.rawpT = (*iter).pt()/((*iter).corrFactor("raw"));
1231
1232
1233 // std::cout << " -- Current JEC SET " << (*iter).currentJECSet()
1234 // << " Level " << (*iter).currentJECLevel()
1235 // << std::endl;
1236
1237 HbbAnalysis::JetECorVars lEnergyCorrections;
1238 if ((*iter).jecSetsAvailable()){
1239 float lJecFactor = (*iter).jecFactor("Uncorrected","NONE",(*iter).currentJECSet());
1240 if (lJecFactor > 0) lCommon.rawpT = (*iter).pt()*lJecFactor;
1241 if (debug_){
1242 std::cout << " ---------------------------------------------- " << std::endl
1243 << " - Raw to Cor Jet # " << iEle << " = " << std::endl
1244 << " -- Raw pT = " << lCommon.rawpT << " eta " << lReco.eta << " phi " << lReco.phi << std::endl;
1245 }
1246
1247 std::vector<std::string> lJECnames = (*iter).availableJECSets();
1248 for (unsigned int iSet(0); iSet < lJECnames.size(); ++iSet){
1249 if (debug_) std::cout << " -- JEC SET " << iSet << " " << lJECnames[iSet] << std::endl;
1250 std::vector<std::string> lJEClevels = (*iter).availableJECLevels(iSet);
1251 for (unsigned int iLev(0); iLev<lJEClevels.size(); ++iLev){
1252 if (debug_) std::cout << " ---- JEC level " << iLev << " " << lJEClevels[iLev]
1253 << " , factor = " << (*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)
1254 << std::endl;
1255 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>(lJEClevels[iLev],(*iter).jecFactor(iLev,pat::JetCorrFactors::NONE,iSet)));
1256 }
1257 }
1258 if (debug_) std::cout << " -- Reco pT = " << lReco.pT
1259 << std::endl;
1260 }
1261
1262 if ((*iter).isCaloJet()) {
1263 jecUncCalo->setJetEta((*iter).eta());
1264 jecUncCalo->setJetPt((*iter).pt());
1265 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncCalo->getUncertainty(true)));
1266 } else if ((*iter).isPFJet()) {
1267 jecUncPF->setJetEta((*iter).eta());
1268 jecUncPF->setJetPt((*iter).pt());
1269 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncPF->getUncertainty(true)));
1270 } else if ((*iter).isJPTJet()) {
1271 jecUncJPT->setJetEta((*iter).eta());
1272 jecUncJPT->setJetPt((*iter).pt());
1273 lEnergyCorrections.Levels.push_back(std::pair<std::string,double>("Uncertainty",jecUncJPT->getUncertainty(true)));
1274 }
1275
1276 //lEnergyCorrections.L1 = (*iter).jecFactor("L1Offset","NONE",(*iter).currentJECSet());
1277 //lEnergyCorrections.L1JPT = (*iter).jecFactor("L1JPTOffset","NONE",(*iter).currentJECSet());
1278 //lEnergyCorrections.L2 = (*iter).jecFactor("L2Relative","NONE",(*iter).currentJECSet());
1279 //lEnergyCorrections.L3 = (*iter).jecFactor("L3Absolute","NONE",(*iter).currentJECSet());
1280 //if (processData_) lEnergyCorrections.L2L3Residual = (*iter).jecFactor("L2L3Residual","NONE",(*iter).currentJECSet());
1281
1282 lCommon.etaMean = (*iter).etaPhiStatistics().etaMean;
1283 lCommon.phiMean = (*iter).etaPhiStatistics().phiMean;
1284 lCommon.etaEtaMoment = (*iter).etaPhiStatistics().etaEtaMoment;
1285 lCommon.phiPhiMoment = (*iter).etaPhiStatistics().phiPhiMoment;
1286 lCommon.etaPhiMoment = (*iter).etaPhiStatistics().etaPhiMoment;
1287
1288 lCommon.l1Match = false;//TODO
1289 lCommon.hltMatch = false;//TODO
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
1509 HbbAnalysis::Jet lObj(lGen,lGenJet,lReco,lCommon,lPF,lJPTPF,lBtag,lEnergyCorrections);
1510 aVec.push_back(lObj);
1511 }
1512
1513 }//loop on element
1514 }//non empty
1515 }//valid
1516
1517 }//HbbJets
1518
1519 void HbbTreeMaker::HbbMet(const edm::Handle<std::vector<pat::MET> > & aCol,
1520 HbbAnalysis::Met & aMet)
1521 {//HbbMet
1522 if (aCol.isValid()) {
1523 HbbAnalysis::MetVars lGen;
1524 HbbAnalysis::MetVars lReco;
1525
1526 assert(aCol->size() == 1);
1527 const pat::MET & lMet = *(aCol->begin());
1528
1529 lReco.mET = lMet.pt();
1530 lReco.mEx = lMet.px();
1531 lReco.mEy = lMet.py();
1532 lReco.sumET = lMet.sumEt();
1533 lReco.phi = lMet.phi();
1534 lReco.mEtSig = lMet.mEtSig();
1535
1536 const reco::GenMET *lGenMET = lMet.genMET();
1537
1538 if (!processData_ && lGenMET){
1539 lGen.mET = lGenMET->pt();
1540 lGen.mEx = lGenMET->px();
1541 lGen.mEy = lGenMET->py();
1542 lGen.sumET = lGenMET->sumEt();
1543 lGen.phi = lGenMET->phi();
1544 lGen.mEtSig = lGenMET->mEtSig();
1545 }
1546 else {
1547 lGen.mET = 0;
1548 lGen.mEx = 0;
1549 lGen.mEy = 0;
1550 lGen.sumET = 0;
1551 lGen.phi = 0;
1552 lGen.mEtSig = 0;
1553 }
1554
1555 aMet.genVars(lGen);
1556 aMet.recoVars(lReco);
1557 }
1558 }//HbbMet
1559
1560 void HbbTreeMaker::HbbTrigger(const edm::Handle<edm::TriggerResults> & aCol,
1561 const edm::TriggerNames & aNames,
1562 std::vector<HbbAnalysis::Trigger> & aVec)
1563 {//HbbTrigger
1564
1565 if (aCol.isValid()){
1566 //edm::TriggerNames lNames;
1567 //lNames.init(*aCol);
1568
1569 //for (unsigned int j=0; j<hltPaths_.size(); j++) {
1570 //bool valid=false;
1571 for (unsigned int i=0; i<aCol->size(); ++i){
1572 std::string trueName = aNames.triggerName(i);//.at(i);
1573
1574 HbbAnalysis::TriggerVars lTrigVars;
1575 lTrigVars.name = trueName;
1576 lTrigVars.index = i;
1577 lTrigVars.accept = aCol->accept(i);
1578
1579 HbbAnalysis::Trigger lObj(lTrigVars);
1580
1581 aVec.push_back(lObj);
1582 }
1583
1584 }
1585
1586 }
1587
1588 void HbbTreeMaker::HbbParticles(const edm::Handle<reco::GenParticleCollection> & aCol,
1589 std::vector<HbbAnalysis::GenParticle> & aVec)
1590 {//genparticles
1591
1592 //add genParticle inside vector
1593 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1594 {//loop on particles
1595 const reco::Candidate & p = (*aCol)[mccount];
1596
1597 HbbAnalysis::MCVars lMC;
1598 lMC.index = mccount;
1599 lMC.E = p.energy();
1600 lMC.pT = p.pt();
1601 lMC.eta = p.eta();
1602 lMC.y = p.y();
1603 lMC.phi = p.phi();
1604 lMC.pdgId = p.pdgId();
1605 lMC.status = p.status();
1606 if (p.status()==3 || (p.status()==2 && (abs(p.pdgId())==4 || abs(p.pdgId())==5)) || (p.status()==1 && p.pt()>5)){
1607 HbbAnalysis::GenParticle lObj(lMC);
1608 aVec.push_back(lObj);
1609 }
1610 }//loop on particles
1611
1612 //now need to get the list of parents....
1613
1614 for (unsigned int mccount = 0;mccount<aCol->size();++mccount)
1615 {//loop on particles
1616 const reco::Candidate & p = (*aCol)[mccount];
1617
1618 unsigned int nD = p.numberOfDaughters();
1619 //std::cout << mccount << " has " << nD << " daughter(s) : " ;
1620 for(unsigned int dau=0;dau<nD;++dau){//loop on daughters
1621 const reco::Candidate * pDau = p.daughter(dau);
1622 //std::cout << pDau << " ("<<std::flush;
1623 for (unsigned int mccount2 = 0;mccount2<aCol->size();++mccount2)
1624 {//loop on particles
1625 const reco::Candidate & p2 = (*aCol)[mccount2];
1626 //std::cout<<"DBG: mccount2 = "<<mccount2<<" gen size = "<<data_->gen().size()<<std::endl;
1627 HbbAnalysis::GenParticle & part2 = aVec.at(0);
1628 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1629 part2 = aVec.at(imc);
1630 if (part2.partVars().index == mccount2) break;
1631 }
1632 if (pDau == &p2) {
1633 part2.setParent(mccount);
1634 //std::cout << &p2 << ", index = " << mccount2 << "), "<<std::flush;
1635 break;
1636 }
1637
1638 //else std::cout << std::endl << "****no match " << mccount2 << " " << &p2 << std::endl;
1639 //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){
1640 //part2.parent(mccount);
1641 //}
1642 }//loop on particles
1643 }//loop on daughters
1644 //std::cout << std::endl;
1645
1646 }//loop on particles
1647
1648 if (debug_>1){
1649 for (unsigned int imc(0); imc < aVec.size(); ++imc){
1650 HbbAnalysis::GenParticle & p = aVec.at(imc);
1651 p.print();
1652 }
1653 }
1654
1655
1656 }//genparticles
1657
1658
1659
1660 void HbbTreeMaker::HbbVertices(const edm::Handle<std::vector<reco::Vertex> > & aCol,
1661 std::vector<HbbAnalysis::Vertex> & aVec)
1662 {
1663
1664 if (aCol.isValid()) {
1665 for (std::vector<reco::Vertex>::const_iterator iter = aCol->begin();
1666 iter != aCol->end();
1667 ++iter)
1668 {
1669
1670 if (!((*iter).isValid()) || (*iter).isFake()) continue;
1671
1672 HbbAnalysis::VertexVars lVtx;
1673
1674 if ((*iter).tracksSize() > 0) {
1675 for (std::vector<reco::TrackBaseRef>::const_iterator lTrk = (*iter).tracks_begin();
1676 lTrk != (*iter).tracks_end();
1677 ++lTrk) {
1678 lVtx.trackWeights.push_back((*iter).trackWeight(*lTrk));
1679 lVtx.trackpT.push_back((*(*lTrk)).pt());
1680 }
1681 }
1682
1683 if (lVtx.trackWeights.size() != (*iter).tracksSize()) {
1684 std::cout<< " -- Problem with tracks, size is not as expected ! "
1685 << std::endl
1686 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1687 << std::endl
1688 << " --- Size of trackWeights = " << lVtx.trackWeights.size()
1689 << std::endl;
1690 }
1691 if (lVtx.trackpT.size() != (*iter).tracksSize()) {
1692 std::cout<< " -- Problem with tracks, size is not as expected ! "
1693 << std::endl
1694 << " --- Size of recoVertex tracks = " << (*iter).tracksSize()
1695 << std::endl
1696 << " --- Size of trackpT = " << lVtx.trackpT.size()
1697 << std::endl;
1698 }
1699
1700 lVtx.chi2 = (*iter).chi2();
1701 lVtx.ndof = (*iter).ndof();
1702 lVtx.x = (*iter).x();
1703 lVtx.y = (*iter).y();
1704 lVtx.z = (*iter).z();
1705 lVtx.rho = (*iter).position().Rho();
1706 lVtx.xError = (*iter).xError();
1707 lVtx.yError = (*iter).yError();
1708 lVtx.zError = (*iter).zError();
1709 lVtx.cov01 = (*iter).covariance(0,1);
1710 lVtx.cov02 = (*iter).covariance(0,2);
1711 lVtx.cov12 = (*iter).covariance(1,2);
1712
1713 //AJG
1714 /*
1715 std::cout << "Vertex (" << (*iter).x() << ","
1716 << (*iter).y() << ","
1717 << (*iter).z() << ")" << std::endl;
1718 */
1719
1720 HbbAnalysis::Vertex lObj(lVtx);
1721 aVec.push_back(lObj);
1722 }
1723 }
1724
1725 }
1726
1727 void HbbTreeMaker::HbbL1Objects(const edm::Handle<l1extra::L1JetParticleCollection> & aCol,
1728 std::vector<HbbAnalysis::L1Object> & aVec,
1729 const unsigned int aType)
1730 {
1731
1732 for (l1extra::L1JetParticleCollection::const_iterator iter = aCol->begin();
1733 iter != aCol->end();
1734 ++iter)
1735 {
1736
1737 HbbAnalysis::L1Vars lVars;
1738 lVars.pT = (*iter).pt();
1739 lVars.ET = (*iter).et();
1740 lVars.eta = (*iter).eta();
1741 lVars.phi = (*iter).phi();
1742 lVars.bx = (*iter).bx();
1743 lVars.type = aType;
1744
1745 HbbAnalysis::L1Object lObj(lVars);
1746 aVec.push_back(lObj);
1747
1748 }
1749
1750 }
1751
1752
1753 void HbbTreeMaker::HbbHLTObjects(const edm::Handle<trigger::TriggerEvent> & aCol,
1754 std::vector<HbbAnalysis::HLTObject> & aVec)
1755 {
1756
1757
1758 //cout
1759 //const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1760 //for (unsigned i=0; i<aCol->sizeFilters(); i++){
1761 //const edm::InputTag & lTag = aCol->filterTag(i);
1762 //std::cout << " -- ele " << i << ": " << lTag << ", key ids = " ;
1763 ////const int index = aCol->filterIndex(lTag);
1764 ////if (index >= aCol->sizeFilters()) {
1765 ////std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1766 ////continue;
1767 ////}
1768 //const trigger::Keys & k = aCol->filterKeys(i);
1769 //for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1770 //std::cout << toc[*ki].id() << ", " ;
1771 //}
1772 //std::cout << std::endl;
1773 //}
1774
1775 for (unsigned i(0); i<hltTagsElec_.size(); ++i){
1776 fillHLTVector(hltTagsElec_[i],aCol,aVec,1);
1777 }
1778 for (unsigned i(0); i<hltTagsMu_.size(); ++i){
1779 fillHLTVector(hltTagsMu_[i],aCol,aVec,2);
1780 }
1781 for (unsigned i(0); i<hltTagsJet_.size(); ++i){
1782 fillHLTVector(hltTagsJet_[i],aCol,aVec,3);
1783 }
1784 }
1785
1786 void HbbTreeMaker::fillHLTVector(const edm::InputTag & aTag,
1787 const edm::Handle<trigger::TriggerEvent> & aCol,
1788 std::vector<HbbAnalysis::HLTObject> & aVec,
1789 const unsigned int aType){
1790
1791 const trigger::TriggerObjectCollection & toc(aCol->getObjects());
1792 const int index = aCol->filterIndex(aTag);
1793 if (index >= aCol->sizeFilters()) {
1794 //std::cout << " -- Filter " << aTag << " not found !" << std::endl;
1795 return;
1796 }
1797
1798 const trigger::Keys & k = aCol->filterKeys(index);
1799
1800 for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1801 HbbAnalysis::HLTVars lVars;
1802 lVars.pT = toc[*ki].pt();
1803 lVars.eta = toc[*ki].eta();
1804 lVars.phi = toc[*ki].phi();
1805 lVars.id = toc[*ki].id();
1806 lVars.mass = toc[*ki].mass();
1807 lVars.type = aType;
1808 HbbAnalysis::HLTObject lObj(lVars);
1809 aVec.push_back(lObj);
1810 }
1811 }
1812
1813 void HbbTreeMaker::HbbGenInfo(const edm::Handle<edm::HepMCProduct> & amcProd,
1814 const edm::Handle<GenRunInfoProduct> & aRunProd)
1815 {
1816 const HepMC::GenEvent * genEvt = amcProd->GetEvent();
1817 HbbAnalysis::GenInfo lInfo;
1818
1819 lInfo.processID(genEvt->signal_process_id());
1820 lInfo.ptHat(genEvt->event_scale());
1821
1822 lInfo.internalXS(aRunProd->internalXSec().value(),
1823 aRunProd->internalXSec().error());
1824
1825 lInfo.externalXSLO(aRunProd->externalXSecLO().value(),
1826 aRunProd->externalXSecLO().error());
1827
1828 lInfo.externalXSNLO(aRunProd->externalXSecNLO().value(),
1829 aRunProd->externalXSecNLO().error());
1830
1831 lInfo.filterEff(aRunProd->filterEfficiency());
1832
1833 event_->generatorInfo(lInfo);
1834
1835 }
1836
1837 #include "FWCore/Framework/interface/MakerMacros.h"
1838 DEFINE_FWK_MODULE(HbbTreeMaker);
1839
1840