ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbAnalyzerNew.cc
Revision: 1.67
Committed: Thu Apr 5 13:49:53 2012 UTC (13 years, 1 month ago) by dlopes
Content type: text/plain
Branch: MAIN
CVS Tags: EdmV21Apr06
Changes since 1.66: +13 -1 lines
Log Message:
added raw jet pt and leading charged track pt within the jet

File Contents

# User Rev Content
1 tboccali 1.1 // -*- C++ -*-
2     //
3     // Package: HbbAnalyzerNew
4     // Class: HbbAnalyzerNew
5     //
6     /**\class HbbAnalyzerNew HbbAnalyzerNew.cc Analysis/HbbAnalyzer/src/HbbAnalyzerNew.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14     // Original Author: David Lopes Pegna,Address unknown,NONE,
15     // Created: Thu Mar 5 13:51:28 EST 2009
16 dlopes 1.67 // $Id: HbbAnalyzerNew.cc,v 1.66 2012/04/03 08:55:44 arizzi Exp $
17 tboccali 1.1 //
18     //
19    
20 arizzi 1.34
21     //uncomment to save also jet collections 1 and 4
22     //#define ENABLE_SIMPLEJETS1
23     //#define ENABLE_SIMPLEJETS4
24    
25 tboccali 1.28 #include "CondFormats/JetMETObjects/interface/JetCorrectorParameters.h"
26     #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h"
27     #include "JetMETCorrections/Objects/interface/JetCorrector.h"
28     #include "JetMETCorrections/Objects/interface/JetCorrectionsRecord.h"
29     #include "DataFormats/TrackReco/interface/TrackFwd.h"
30    
31 tboccali 1.2 #include "VHbbAnalysis/HbbAnalyzer/interface/HbbAnalyzerNew.h"
32 tboccali 1.33 #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h"
33 tboccali 1.5
34 arizzi 1.34 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
35 degrutto 1.58 #include "DataFormats/Math/interface/deltaR.h"
36 degrutto 1.61 #include "DataFormats/Math/interface/LorentzVector.h"
37     #include "DataFormats/Math/interface/Vector3D.h"
38     #include "Math/GenVector/PxPyPzM4D.h"
39    
40    
41     #include <cmath>
42    
43    
44 degrutto 1.58
45 arizzi 1.34
46 tboccali 1.1 #define GENPTOLOR(a) TLorentzVector((a).px(), (a).py(), (a).pz(), (a).energy())
47     #define GENPTOLORP(a) TLorentzVector((a)->px(), (a)->py(), (a)->pz(), (a)->energy())
48    
49 tboccali 1.28
50 degrutto 1.58
51 tboccali 1.28 struct CompareJetPtMuons {
52     bool operator()( const VHbbEvent::MuonInfo& j1, const VHbbEvent::MuonInfo& j2 ) const {
53     return j1.p4.Pt() > j2.p4.Pt();
54     }
55     };
56     struct CompareJetPtElectrons {
57     bool operator()( const VHbbEvent::ElectronInfo& j1, const VHbbEvent::ElectronInfo& j2 ) const {
58     return j1.p4.Pt() > j2.p4.Pt();
59     }
60     };
61     struct CompareJetPtTaus {
62     bool operator()( const VHbbEvent::TauInfo& j1, const VHbbEvent::TauInfo& j2 ) const {
63     return j1.p4.Pt() > j2.p4.Pt();
64     }
65     };
66    
67    
68    
69 tboccali 1.1 HbbAnalyzerNew::HbbAnalyzerNew(const edm::ParameterSet& iConfig):
70 tboccali 1.7 eleLabel_(iConfig.getParameter<edm::InputTag>("electronTag")),
71     muoLabel_(iConfig.getParameter<edm::InputTag>("muonTag")),
72 degrutto 1.58 lep_ptCutForBjets_(iConfig.getParameter<double>("lep_ptCutForBjets")),
73     elenoCutsLabel_(iConfig.getParameter<edm::InputTag>("electronNoCutsTag")),
74     muonoCutsLabel_(iConfig.getParameter<edm::InputTag>("muonNoCutsTag")),
75 tboccali 1.7 jetLabel_(iConfig.getParameter<edm::InputTag>("jetTag")),
76     subjetLabel_(iConfig.getParameter<edm::InputTag>("subjetTag")),
77 dlopes 1.59 filterjetLabel_(iConfig.getParameter<edm::InputTag>("filterjetTag")),
78 tboccali 1.7 simplejet1Label_(iConfig.getParameter<edm::InputTag>("simplejet1Tag")),
79     simplejet2Label_(iConfig.getParameter<edm::InputTag>("simplejet2Tag")),
80     simplejet3Label_(iConfig.getParameter<edm::InputTag>("simplejet3Tag")),
81     simplejet4Label_(iConfig.getParameter<edm::InputTag>("simplejet4Tag")),
82     tauLabel_(iConfig.getParameter<edm::InputTag>("tauTag")),
83     metLabel_(iConfig.getParameter<edm::InputTag>("metTag")),
84     phoLabel_(iConfig.getParameter<edm::InputTag>("photonTag")),
85     hltResults_(iConfig.getParameter<edm::InputTag>("hltResultsTag")),
86 tboccali 1.9 runOnMC_(iConfig.getParameter<bool>("runOnMC")), verbose_(iConfig.getUntrackedParameter<bool>("verbose")) {
87 tboccali 1.3
88 tboccali 1.1 //
89     // put the setwhatproduced etc etc
90    
91     produces<VHbbEvent>();
92 tboccali 1.11 produces<VHbbEventAuxInfo>();
93 tboccali 1.1
94    
95     }
96    
97    
98     HbbAnalyzerNew::~HbbAnalyzerNew(){
99    
100     // do anything here that needs to be done at desctruction time
101     // (e.g. close files, deallocate resources etc.)
102    
103     }
104    
105    
106     //
107     // member functions
108     //
109    
110     // ------------ method called to for each event ------------
111     void
112     HbbAnalyzerNew::produce(edm::Event& iEvent, const edm::EventSetup& iSetup){
113     using namespace edm;
114     using namespace reco;
115 arizzi 1.34
116    
117 tboccali 1.28 // JEC Uncertainty
118    
119 tboccali 1.29 // JetCorrectionUncertainty *jecUnc=0;
120 tboccali 1.30 edm::ESHandle<JetCorrectorParametersCollection> JetCorParColl;
121 arizzi 1.55 iSetup.get<JetCorrectionsRecord>().get("AK5PFchs",JetCorParColl);
122 tboccali 1.30 JetCorrectionUncertainty *jecUnc=0;
123 tboccali 1.31 // if (!runOnMC_){
124 tboccali 1.28 JetCorrectorParameters const & JetCorPar = (*JetCorParColl)["Uncertainty"];
125 tboccali 1.30 jecUnc = new JetCorrectionUncertainty(JetCorPar);
126 tboccali 1.31 // }
127 tboccali 1.1
128 tboccali 1.11 std::auto_ptr<VHbbEvent> hbbInfo( new VHbbEvent() );
129     std::auto_ptr<VHbbEventAuxInfo> auxInfo( new VHbbEventAuxInfo() );
130 arizzi 1.34
131    
132 tboccali 1.35 if (runOnMC_){
133     Handle<GenEventInfoProduct> evt_info;
134     iEvent.getByType(evt_info);
135     auxInfo->weightMCProd = evt_info->weight();
136 arizzi 1.34 }
137     else
138 tboccali 1.35 { auxInfo->weightMCProd =1.;}
139 tboccali 1.1 //
140     // ??
141 tboccali 1.35
142 tboccali 1.1 // trigger
143 tboccali 1.28
144     // trigger
145 tboccali 1.1 edm::Handle<edm::TriggerResults> hltresults;
146     //iEvent.getByLabel("TriggerResults", hltresults);
147    
148     //edm::InputTag tag("TriggerResults::HLT");
149     // edm::InputTag tag("TriggerResults::HLT0");
150     iEvent.getByLabel(hltResults_, hltresults);
151    
152     const edm::TriggerNames & triggerNames_ = iEvent.triggerNames(*hltresults);
153 tboccali 1.28
154 tboccali 1.1 int ntrigs = hltresults->size();
155 bortigno 1.25 if (ntrigs==0){std::cerr << "%HLTInfo -- No trigger name given in TriggerResults of the input " << std::endl;}
156 tboccali 1.1
157     BeamSpot vertexBeamSpot;
158     edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
159     iEvent.getByLabel("offlineBeamSpot",recoBeamSpotHandle);
160     vertexBeamSpot = *recoBeamSpotHandle;
161     /*
162     double BSx=vertexBeamSpot.x0();
163     double BSy=vertexBeamSpot.y0();
164     double BSz=vertexBeamSpot.z0();
165     */
166    
167     double MinVtxProb=-999.;
168     int VtxIn=-99;
169    
170     Handle<reco::VertexCollection> recVtxs;
171     iEvent.getByLabel("offlinePrimaryVertices", recVtxs);
172    
173 tboccali 1.15 auxInfo->pvInfo.nVertices = recVtxs->size();
174    
175 tboccali 1.1 for(size_t i = 0; i < recVtxs->size(); ++ i) {
176     const Vertex &vtx = (*recVtxs)[i];
177     double RecVtxProb=TMath::Prob(vtx.chi2(),vtx.ndof());
178     if(RecVtxProb>MinVtxProb){
179     VtxIn=i;
180     MinVtxProb=RecVtxProb;
181     }
182     }
183    
184     const Vertex &RecVtx = (*recVtxs)[VtxIn];
185     const Vertex &RecVtxFirst = (*recVtxs)[0];
186    
187 tboccali 1.11 auxInfo->pvInfo.firstPVInPT2 = TVector3(RecVtxFirst.x(), RecVtxFirst.y(), RecVtxFirst.z());
188     auxInfo->pvInfo.firstPVInProb = TVector3(RecVtx.x(), RecVtx.y(), RecVtx.z());
189 tboccali 1.51
190     (auxInfo->pvInfo).efirstPVInPT2 = (RecVtxFirst.error());
191     (auxInfo->pvInfo).efirstPVInProb = RecVtx.error();
192 tboccali 1.1
193     edm::Handle<double> rhoHandle;
194 tboccali 1.33 iEvent.getByLabel(edm::InputTag("kt6PFJets", "rho"),rhoHandle);
195     auxInfo->puInfo.rho = *rhoHandle;
196 degrutto 1.37
197     edm::Handle<double> rho25Handle;
198     iEvent.getByLabel(edm::InputTag("kt6PFJets25", "rho"),rho25Handle);
199     auxInfo->puInfo.rho25 = *rho25Handle;
200    
201 tboccali 1.33 edm::Handle<std::vector< PileupSummaryInfo> > puHandle;
202    
203     if (runOnMC_){
204     iEvent.getByType(puHandle);
205     if (puHandle.isValid()){
206    
207     std::vector< PileupSummaryInfo> pu = (*puHandle);
208     for (std::vector<PileupSummaryInfo>::const_iterator it= pu.begin(); it!=pu.end(); ++it){
209     int bx = (*it).getBunchCrossing();
210     unsigned int num = (*it).getPU_NumInteractions();
211     // std::cout <<" PU PUSHING "<<bx<<" " <<num<<std::endl;
212     auxInfo->puInfo.pus[bx] =num;
213     }
214     }
215     }
216    
217 tboccali 1.1 //// real start
218    
219    
220     Handle<GenParticleCollection> genParticles;
221    
222     bool printJet=0;
223    
224    
225 tboccali 1.3 if(runOnMC_){
226 tboccali 1.1
227 tboccali 1.28 iEvent.getByLabel("genParticles", genParticles);
228 tboccali 1.1
229     for(size_t i = 0; i < genParticles->size(); ++ i) {
230 tboccali 1.28
231 tboccali 1.1 const GenParticle & p = (*genParticles)[i];
232     int id = p.pdgId();
233     int st = p.status();
234 tboccali 1.12
235     if(id==25){
236 tboccali 1.1
237 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo htemp;
238     htemp.status=st;
239     htemp.charge=p.charge();
240     if(p.mother(0)!=0) htemp.momid=p.mother(0)->pdgId();
241     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) htemp.gmomid=p.mother(0)->mother(0)->pdgId();
242 tboccali 1.13 htemp.p4 = GENPTOLOR(p);
243 tboccali 1.28
244 tboccali 1.1 int ndau = p.numberOfDaughters();
245     for(int j = 0; j < ndau; ++ j) {
246     const Candidate * Hdau = p.daughter( j );
247 tboccali 1.12 htemp.dauid.push_back(Hdau->pdgId());
248     htemp.dauFourMomentum.push_back(GENPTOLORP(Hdau));
249 tboccali 1.1 }
250 tboccali 1.12 (auxInfo->mcH).push_back(htemp);
251 tboccali 1.1 }
252 tboccali 1.28
253    
254     if(abs(id)==24){
255 tboccali 1.1
256 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo wtemp;
257     wtemp.status=st;
258     wtemp.charge=p.charge();
259     if(p.mother(0)!=0) wtemp.momid=p.mother(0)->pdgId();
260     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) wtemp.gmomid=p.mother(0)->mother(0)->pdgId();
261 tboccali 1.13 wtemp.p4=GENPTOLOR(p);
262 tboccali 1.28
263 tboccali 1.1 int ndau = p.numberOfDaughters();
264     for(int j = 0; j < ndau; ++ j) {
265     const Candidate * Wdau = p.daughter( j );
266 tboccali 1.12 wtemp.dauid.push_back(Wdau->pdgId());
267     wtemp.dauFourMomentum.push_back(GENPTOLORP(Wdau));
268 tboccali 1.1 }
269 tboccali 1.12 auxInfo->mcW.push_back(wtemp);
270 tboccali 1.1 }
271 sethzenz 1.64
272     if(abs(id)==15) {
273     VHbbEventAuxInfo::ParticleMCInfo tautemp;
274     tautemp.status=st;
275     tautemp.charge=p.charge();
276     if(p.mother(0)!=0) tautemp.momid=p.mother(0)->pdgId();
277     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) tautemp.gmomid=p.mother(0)->mother(0)->pdgId();
278     tautemp.p4=GENPTOLOR(p);
279    
280     int ndau = p.numberOfDaughters();
281     for(int j = 0; j < ndau; ++ j) {
282     const Candidate * Taudau = p.daughter( j );
283     tautemp.dauid.push_back(Taudau->pdgId());
284     tautemp.dauFourMomentum.push_back(GENPTOLORP(Taudau));
285     }
286     auxInfo->mcTau.push_back(tautemp);
287     }
288 tboccali 1.1
289     if(abs(id)==23){
290    
291 tboccali 1.28
292 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo ztemp;
293     ztemp.status=st;
294     ztemp.charge=p.charge();
295     if(p.mother(0)!=0) ztemp.momid=p.mother(0)->pdgId();
296     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) ztemp.gmomid=p.mother(0)->mother(0)->pdgId();
297 tboccali 1.13 ztemp.p4=GENPTOLOR(p);
298 tboccali 1.1
299     int ndau = p.numberOfDaughters();
300     for(int j = 0; j < ndau; ++ j) {
301     const Candidate * Zdau = p.daughter( j );
302 tboccali 1.12 ztemp.dauid.push_back(Zdau->pdgId());
303 sdas 1.57 ztemp.dauFourMomentum.push_back(GENPTOLORP(Zdau));
304 tboccali 1.1 }
305 tboccali 1.12 auxInfo->mcZ.push_back(ztemp);
306 tboccali 1.1 }
307     //
308     // binfo
309     //
310 tboccali 1.12
311 tboccali 1.1
312     if(id==5){
313 tboccali 1.28
314 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo btemp;
315     btemp.status=st;
316     btemp.charge=p.charge();
317     if(p.mother(0)!=0) btemp.momid=p.mother(0)->pdgId();
318     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) btemp.gmomid=p.mother(0)->mother(0)->pdgId();
319 tboccali 1.28
320     btemp.p4=GENPTOLOR(p);
321    
322     int nHDaubdau = p.numberOfDaughters();
323     for(int j = 0; j < nHDaubdau; ++ j) {
324     const Candidate * Bdau = p.daughter( j );
325     btemp.dauid.push_back(Bdau->pdgId());
326     }
327 tboccali 1.12 auxInfo->mcB.push_back(btemp);
328 tboccali 1.1 }
329    
330     if(id==-5){
331 tboccali 1.28
332 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo bbtemp;
333    
334     bbtemp.status=st;
335     bbtemp.charge=p.charge();
336     if(p.mother(0)!=0) bbtemp.momid=p.mother(0)->pdgId();
337     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) bbtemp.gmomid=p.mother(0)->mother(0)->pdgId();
338 tboccali 1.28
339     bbtemp.p4=GENPTOLOR(p);
340    
341     int nHDaubdau = p.numberOfDaughters();
342     for(int j = 0; j < nHDaubdau; ++ j) {
343     const Candidate * Bdau = p.daughter( j );
344     bbtemp.dauid.push_back(Bdau->pdgId());
345     }
346    
347    
348 tboccali 1.12 auxInfo->mcBbar.push_back(bbtemp);
349     }
350 tboccali 1.1
351     if(abs(id)==4){
352 tboccali 1.12 VHbbEventAuxInfo::ParticleMCInfo ctemp;
353     ctemp.status=st;
354     ctemp.charge=p.charge();
355     if(p.mother(0)!=0) ctemp.momid=p.mother(0)->pdgId();
356     if(p.mother(0)!=0 && p.mother(0)->mother(0)!=0) ctemp.gmomid=p.mother(0)->mother(0)->pdgId();
357 tboccali 1.28
358     ctemp.p4=GENPTOLOR(p);
359    
360     int nHDaubdau = p.numberOfDaughters();
361     for(int j = 0; j < nHDaubdau; ++ j) {
362     const Candidate * Bdau = p.daughter( j );
363     ctemp.dauid.push_back(Bdau->pdgId());
364     }
365    
366 tboccali 1.12 auxInfo->mcC.push_back(ctemp);
367 tboccali 1.28
368 tboccali 1.1 }
369    
370     }
371    
372     } // isMC
373    
374     /////// end generator block
375    
376    
377     edm::Handle<edm::View<pat::Muon> > muonHandle;
378     iEvent.getByLabel(muoLabel_,muonHandle);
379     edm::View<pat::Muon> muons = *muonHandle;
380    
381     // hard jet
382     edm::Handle<edm::View<pat::Jet> > jetHandle;
383     iEvent.getByLabel(jetLabel_,jetHandle);
384     edm::View<pat::Jet> jets = *jetHandle;
385    
386     // sub jet
387     edm::Handle<edm::View<pat::Jet> > subjetHandle;
388     iEvent.getByLabel(subjetLabel_,subjetHandle);
389     edm::View<pat::Jet> subjets = *subjetHandle;
390    
391 dlopes 1.59 // filter jet
392     edm::Handle<edm::View<pat::Jet> > filterjetHandle;
393     iEvent.getByLabel(filterjetLabel_,filterjetHandle);
394     edm::View<pat::Jet> filterjets = *filterjetHandle;
395    
396 tboccali 1.1 // standard jets
397    
398     edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
399     iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
400     edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
401    
402     edm::Handle<edm::View<pat::Jet> > simplejet2Handle;
403     iEvent.getByLabel(simplejet2Label_,simplejet2Handle);
404     edm::View<pat::Jet> simplejets2 = *simplejet2Handle;
405    
406     edm::Handle<edm::View<pat::Jet> > simplejet3Handle;
407     iEvent.getByLabel(simplejet3Label_,simplejet3Handle);
408     edm::View<pat::Jet> simplejets3 = *simplejet3Handle;
409    
410     edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
411     iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
412     edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
413    
414    
415     edm::Handle<edm::View<pat::Electron> > electronHandle;
416     iEvent.getByLabel(eleLabel_,electronHandle);
417     edm::View<pat::Electron> electrons = *electronHandle;
418    
419    
420     // edm::Handle<edm::View<pat::Photon> > phoHandle;
421     // iEvent.getByLabel(phoLabel_,phoHandle);
422     // edm::View<pat::Photon> photons = *phoHandle;
423    
424     edm::Handle<edm::View<pat::Tau> > tauHandle;
425     iEvent.getByLabel(tauLabel_,tauHandle);
426     edm::View<pat::Tau> taus = *tauHandle;
427    
428    
429 bortigno 1.19 //BTAGGING SCALE FACTOR FROM DATABASE
430     //Combined Secondary Vertex Loose
431     edm::ESHandle<BtagPerformance> bTagSF_CSVL_;
432     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVL",bTagSF_CSVL_);
433     //Combined Secondary Vertex Medium
434     edm::ESHandle<BtagPerformance> bTagSF_CSVM_;
435     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVM",bTagSF_CSVM_);
436     //Combined Secondary Vertex Tight
437     edm::ESHandle<BtagPerformance> bTagSF_CSVT_;
438     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVT",bTagSF_CSVT_);
439    
440 bortigno 1.21 edm::ESHandle<BtagPerformance> mistagSF_CSVL_;
441     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVL",mistagSF_CSVL_);
442     //Combined Secondary Vertex Medium
443     edm::ESHandle<BtagPerformance> mistagSF_CSVM_;
444     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVM",mistagSF_CSVM_);
445     //Combined Secondary Vertex Tight
446     edm::ESHandle<BtagPerformance> mistagSF_CSVT_;
447     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVT",mistagSF_CSVT_);
448    
449 arizzi 1.27 BTagSFContainer btagSFs;
450     btagSFs.BTAGSF_CSVL = (bTagSF_CSVL_.product());
451     btagSFs.BTAGSF_CSVM = (bTagSF_CSVM_.product());
452     btagSFs.BTAGSF_CSVT = (bTagSF_CSVT_.product());
453     btagSFs.MISTAGSF_CSVL = (mistagSF_CSVL_.product());
454     btagSFs.MISTAGSF_CSVM = (mistagSF_CSVM_.product());
455     btagSFs.MISTAGSF_CSVT = (mistagSF_CSVT_.product());
456 tboccali 1.1
457 arizzi 1.34 #ifdef ENABLE_SIMPLEJETS1
458 tboccali 1.1 for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
459     // if(jet_iter->pt()>50)
460     // njetscounter++;
461     VHbbEvent::SimpleJet sj;
462 tboccali 1.44 // std::cout <<" sj1"<<std::endl;
463 tboccali 1.28 fillSimpleJet(sj,jet_iter);
464 tboccali 1.31 // if(!runOnMC_)
465 tboccali 1.28
466 tboccali 1.31 setJecUnc(sj,jecUnc);
467 tboccali 1.28
468 tboccali 1.1 Particle::LorentzVector p4Jet = jet_iter->p4();
469    
470 tboccali 1.3 if(runOnMC_){
471 bortigno 1.19
472 arizzi 1.27 fillScaleFactors(sj, btagSFs);
473 bortigno 1.24
474     //PAT genJet matching
475     //genJet
476     const reco::GenJet *gJ = jet_iter->genJet();
477     //physical parton for mother info ONLY
478 bortigno 1.43 if( (jet_iter->genParton()) ){
479     sj.bestMCid = jet_iter->genParton()->pdgId();
480     if( (jet_iter->genParton()->mother()) )
481     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
482     }
483 bortigno 1.24 TLorentzVector gJp4;
484     if(gJ){
485     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
486 bortigno 1.43 sj.bestMCp4 = gJp4;
487 bortigno 1.24 if(verbose_){
488     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
489     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
490 tboccali 1.28 std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
491 bortigno 1.24 std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
492 tboccali 1.1 }
493     }
494 bortigno 1.24
495 bortigno 1.20 } //isMC
496 tboccali 1.1 hbbInfo->simpleJets.push_back(sj);
497    
498     }
499 arizzi 1.34 #endif //ENABLE_SIMPLEJETS1
500 tboccali 1.30
501     for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets3.begin(); jet_iter!=simplejets3.end(); ++jet_iter){
502     // if(jet_iter->pt()>50)
503     // njetscounter++;
504     VHbbEvent::SimpleJet sj;
505 tboccali 1.44 // std::cout <<" sj3"<<std::endl;
506 tboccali 1.30 fillSimpleJet(sj,jet_iter);
507 tboccali 1.31 // if(!runOnMC_)
508     setJecUnc(sj,jecUnc);
509 tboccali 1.30
510 tboccali 1.31 Particle::LorentzVector p4Jet = jet_iter->p4();
511 tboccali 1.30
512     if(runOnMC_){
513    
514     fillScaleFactors(sj, btagSFs);
515    
516     //PAT genJet matching
517     //genJet
518     const reco::GenJet *gJ = jet_iter->genJet();
519     //physical parton for mother info ONLY
520 bortigno 1.43 if( (jet_iter->genParton()) ){
521     sj.bestMCid = jet_iter->genParton()->pdgId();
522     if( (jet_iter->genParton()->mother()) )
523     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
524     }
525 tboccali 1.30 TLorentzVector gJp4;
526     if(gJ){
527     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
528 bortigno 1.43 sj.bestMCp4 = gJp4;
529 tboccali 1.30 if(verbose_){
530     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
531     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
532     std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
533     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
534     }
535     }
536    
537     } //isMC
538 degrutto 1.58 //
539    
540    
541 tboccali 1.30 hbbInfo->simpleJets3.push_back(sj);
542    
543     }
544    
545 arizzi 1.34 #ifdef ENABLE_SIMPLEJETS4
546 tboccali 1.30 for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets4.begin(); jet_iter!=simplejets4.end(); ++jet_iter){
547     // if(jet_iter->pt()>50)
548     // njetscounter++;
549     VHbbEvent::SimpleJet sj;
550 tboccali 1.44 // std::cout <<" sj4"<<std::endl;
551 tboccali 1.30 fillSimpleJet(sj,jet_iter);
552 tboccali 1.31 // if(!runOnMC_)
553     setJecUnc(sj,jecUnc);
554 tboccali 1.30
555    
556     Particle::LorentzVector p4Jet = jet_iter->p4();
557    
558     if(runOnMC_){
559    
560     fillScaleFactors(sj, btagSFs);
561    
562     //PAT genJet matching
563     //genJet
564     const reco::GenJet *gJ = jet_iter->genJet();
565     //physical parton for mother info ONLY
566 bortigno 1.43 if( (jet_iter->genParton()) ){
567     sj.bestMCid = jet_iter->genParton()->pdgId();
568     if( (jet_iter->genParton()->mother()) )
569     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
570     }
571 tboccali 1.30 TLorentzVector gJp4;
572     if(gJ){
573     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
574 bortigno 1.43 sj.bestMCp4 = gJp4;
575 tboccali 1.30 if(verbose_){
576     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
577     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
578     std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
579     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
580     }
581     }
582    
583     } //isMC
584     hbbInfo->simpleJets4.push_back(sj);
585    
586     }
587 arizzi 1.34 #endif //ENABLE SIMPLEJETS4
588    
589 tboccali 1.1
590     for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets2.begin(); jet_iter!=simplejets2.end(); ++jet_iter){
591    
592     VHbbEvent::SimpleJet sj;
593 tboccali 1.44 // std::cout <<" sj2"<<std::endl;
594 tboccali 1.28 fillSimpleJet(sj,jet_iter);
595 tboccali 1.31 // if(!runOnMC_)
596     setJecUnc(sj,jecUnc);
597 tboccali 1.28 /* sj.flavour = jet_iter->partonFlavour();
598 tboccali 1.1
599    
600     sj.tche=jet_iter->bDiscriminator("trackCountingHighEffBJetTags");
601     sj.tchp=jet_iter->bDiscriminator("trackCountingHighPurBJetTags");
602     sj.jp=jet_iter->bDiscriminator("jetProbabilityBJetTags");
603     sj.jpb=jet_iter->bDiscriminator("jetBProbabilityBJetTags");
604     sj.ssvhe=jet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
605     sj.csv=jet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
606     sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
607     sj.charge=jet_iter->jetCharge();
608     sj.ntracks=jet_iter->associatedTracks().size();
609 tboccali 1.13 sj.p4=GENPTOLORP(jet_iter);
610 tboccali 1.6 sj.chargedTracksFourMomentum=(getChargedTracksMomentum(&*(jet_iter)));
611 bortigno 1.24 sj.SF_CSVL=1;
612     sj.SF_CSVM=1;
613     sj.SF_CSVT=1;
614     sj.SF_CSVLerr=0;
615     sj.SF_CSVMerr=0;
616     sj.SF_CSVTerr=0;
617 tboccali 1.28
618     //
619     // addtaginfo for csv
620     //
621    
622     if (jet_iter->hasTagInfo("SimpleSecondaryVertex")) {
623    
624     const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
625     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
626     sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
627     Measurement1D m = tf->flightDistance(0);
628     sj.vtx3dL = m.value();
629     sj.vtx3deL = m.error();
630     }
631    
632    
633 bortigno 1.24 //
634     // add tVector
635     //
636 tboccali 1.5 sj.tVector = getTvect(&(*jet_iter));
637 tboccali 1.28 */
638 tboccali 1.1 Particle::LorentzVector p4Jet = jet_iter->p4();
639    
640 tboccali 1.3 if(runOnMC_){
641 bortigno 1.24
642     //BTV scale factors
643 arizzi 1.27 fillScaleFactors(sj, btagSFs);
644 bortigno 1.24
645     //PAT genJet matching
646     //genJet
647     const reco::GenJet *gJ = jet_iter->genJet();
648     //physical parton for mother info ONLY
649 bortigno 1.43 if( (jet_iter->genParton()) ){
650     sj.bestMCid = jet_iter->genParton()->pdgId();
651     if( (jet_iter->genParton()->mother()) )
652     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
653     }
654 bortigno 1.24 TLorentzVector gJp4;
655     if(gJ){
656     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
657 bortigno 1.43 sj.bestMCp4 = gJp4;
658 bortigno 1.24 if(verbose_){
659     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
660     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
661     std::clog << "genJet matched deltaR = " << gJp4.DeltaR(sj.p4) << std::endl;
662     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
663 tboccali 1.1 }
664     }
665 bortigno 1.24
666 degrutto 1.58 // add flag if a mc lepton is find inside a cone around the jets...
667     iEvent.getByLabel("genParticles", genParticles);
668    
669     for(size_t i = 0; i < genParticles->size(); ++ i) {
670    
671     const GenParticle & p = (*genParticles)[i];
672     int id = 0;
673     p.pt()> lep_ptCutForBjets_ ? id= p.pdgId(): 0;
674    
675     // std::cout<< "found a muon with pt " << mu->pt() << std::endl;
676 degrutto 1.61 if ((abs(id)==13 || abs(id)==11) && deltaR(p.eta(), p.phi(), sj.p4.Eta(), sj.p4.Phi() ) <0.5) sj.isSemiLeptMCtruth=1;
677 degrutto 1.58 }
678    
679     } //isMC
680 degrutto 1.61
681 degrutto 1.58 // add flag if a reco lepton is find inside a cone around the jets...
682     edm::Handle<edm::View<reco::Candidate> > muonNoCutsHandle;
683     iEvent.getByLabel(muonoCutsLabel_,muonNoCutsHandle);
684 degrutto 1.61 edm::View<reco::Candidate> muonsNoCuts = *muonNoCutsHandle;
685    
686 degrutto 1.58
687    
688     for(edm::View<reco::Candidate>::const_iterator mu = muonsNoCuts.begin(); mu!=muonsNoCuts.end() && sj.isSemiLept!=1; ++mu){
689     // std::cout<< "found a muon with pt " << mu->pt() << std::endl;
690 degrutto 1.61 const pat::Muon& m = static_cast <const pat::Muon&> (*mu);
691     float Smpt = m.pt();
692     float Smeta = m.eta();
693     float Smphi = m.phi();
694    
695     float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
696    
697     if ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5) {
698     sj.isSemiLept=1;
699     //isSemiLept(-99), isSemiLeptMCtruth(-99), SoftLeptPt(-99), SoftLeptdR(-99), SoftLeptptRel(-99), SoftLeptpdgId(-99), SoftLeptIdlooseMu(-99), SoftLeptId95(-99), SoftLeptRelCombIso(-99),
700     sj.SoftLeptpdgId =13;
701     sj.SoftLeptdR= SmJdR;
702     sj.SoftLeptPt=Smpt;
703     TVector3 mvec ( m.p4().Vect().X(), m.p4().Vect().Y(), m.p4().Vect().Z() );
704     sj.SoftLeptptRel= sj.p4.Perp( mvec );
705     sj.SoftLeptRelCombIso = (m.trackIso() + m.ecalIso() + m.hcalIso() ) / Smpt ;
706     sj.SoftLeptIdlooseMu=m.muonID("TMLastStationLoose");
707     }
708 degrutto 1.58 }
709    
710 degrutto 1.61
711     edm::Handle<edm::View<reco::Candidate> > eleNoCutsHandle;
712     iEvent.getByLabel(elenoCutsLabel_,eleNoCutsHandle);
713     edm::View<reco::Candidate> elesNoCuts = *eleNoCutsHandle;
714    
715    
716    
717     for(edm::View<reco::Candidate>::const_iterator ele = elesNoCuts.begin(); ele!=elesNoCuts.end() && sj.isSemiLept!=1; ++ele){
718    
719     const pat::Electron& e = static_cast <const pat::Electron&> (*ele);
720     float Smpt = e.pt();
721     float Smeta = e.eta();
722     float Smphi = e.phi();
723    
724     float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
725     if ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5) {
726     sj.isSemiLept=1;
727     sj.SoftLeptpdgId =11;
728     sj.SoftLeptdR= SmJdR;
729     sj.SoftLeptPt=Smpt;
730     TVector3 mvec ( e.p4().Vect().X(), e.p4().Vect().Y(), e.p4().Vect().Z() );
731     sj.SoftLeptptRel= sj.p4.Perp( mvec );
732     sj.SoftLeptRelCombIso = (e.trackIso() + e.ecalIso() + e.hcalIso() ) / Smpt ;
733     // sj.SoftLeptId95=e.electronID("eidVBTFCom95");
734 degrutto 1.62 //std::cout << "before ele id " << std::endl;
735     // std::cout << " e.e.sigmaIetaIeta " << e.sigmaIetaIeta() << std::endl;
736 degrutto 1.61 //std::cout << " e.isEB() " << e.isEB() << std::endl;
737     if (
738     ( fabs(Smeta)<2.5 && !( abs(Smeta)>1.4442 && abs(Smeta)<1.566)) &&
739    
740     (( abs(Smeta)>1.566 && (e.sigmaIetaIeta()<0.01) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.8 && e.deltaPhiSuperClusterTrackAtVtx()>-0.8) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.007 && e.deltaEtaSuperClusterTrackAtVtx()>-0.007 ) )
741     || ( abs(Smeta)<1.4442 && (e.sigmaIetaIeta()<0.03) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.7 && e.deltaPhiSuperClusterTrackAtVtx()>-0.7 ) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.01 && e.deltaEtaSuperClusterTrackAtVtx()>-0.01 ) ))
742     )
743     sj.SoftLeptId95=1;
744     }
745     }
746    
747    
748 degrutto 1.58
749    
750 tboccali 1.1
751     hbbInfo->simpleJets2.push_back(sj);
752    
753     }
754    
755    
756     /* const GenJet* jet1Mc = bjet1.genJet();
757     const GenJet* jet2Mc = bjet2.genJet();
758     if(jet1Mc!=0){
759     MCbJet1MomId=jet1Mc->mother()->pdgId();
760     MCbJet1GMomId=jet1Mc->mother()->mother()->pdgId();
761     }
762    
763     if(jet2Mc!=0){
764     MCbJet2MomId=jet2Mc->mother()->pdgId();
765     MCbJet2GMomId=jet2Mc->mother()->mother()->pdgId();
766     }
767     */
768    
769    
770    
771     /////// hard jet
772    
773    
774     double matEta[1000*30],matPhi[1000*30];
775     for(int i=0;i<1000;i++){for(int j=0;j<30;j++){matEta[i*j]=-99.;matPhi[i*j]=-99.;}}
776    
777     for(edm::View<pat::Jet>::const_iterator jet_iter = jets.begin(); jet_iter!=jets.end(); ++jet_iter){
778    
779     if(printJet) {std::cout << "Jet Pt: " << jet_iter->pt() << " E,M: " << jet_iter->p4().E() << " " << jet_iter->p4().M() << "\n";}
780    
781     reco::Jet::Constituents constituents = jet_iter->getJetConstituents();
782    
783     // if(printJet) {std::cout << "NsubJets: " << constituents.size() << "\n";}
784     VHbbEvent::HardJet hj;
785     hj.constituents=constituents.size();
786 tboccali 1.13 hj.p4 =GENPTOLORP(jet_iter);
787 tboccali 1.28
788 tboccali 1.1 for (unsigned int iJC(0); iJC<constituents.size(); ++iJC ){
789     Jet::Constituent icandJet = constituents[iJC];
790    
791     if(printJet) {std::cout << "subJet Pt: " << icandJet->pt() << " subJet E,M,eta,phi: " << icandJet->p4().E() << ","
792     << icandJet->p4().M() << "," << icandJet->eta() << "," << icandJet->phi() << "\n"; }
793    
794    
795     hj.subFourMomentum.push_back(GENPTOLORP(icandJet));
796     hj.etaSub.push_back(icandJet->eta());
797     hj.phiSub.push_back(icandJet->phi());
798    
799     }
800     hbbInfo->hardJets.push_back(hj);
801     }
802    
803     // HardJetSubEta2.SetMatrixArray(matEta);
804     // HardJetSubPhi2.SetMatrixArray(matPhi);
805     // TMatrixDRow a1(HardJetSubEta2,0);
806     // for(int i=0;i<30;i++){
807     // std::cout << "test: " << a1[i] << "\n";
808     // }
809    
810     // pat subJets with Btag
811    
812    
813     for(edm::View<pat::Jet>::const_iterator subjet_iter = subjets.begin(); subjet_iter!=subjets.end(); ++subjet_iter){
814    
815     if(printJet) {std::cout << "SubJetTagged Pt: " << subjet_iter->pt() << " E,M,eta,phi,Btag: " << subjet_iter->p4().E()
816     << "," << subjet_iter->p4().M() << "," << subjet_iter->eta() << "," << subjet_iter->phi()
817     << "," << subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
818    
819     VHbbEvent::SimpleJet sj;
820 tboccali 1.44 // std::cout <<" sub jet "<<std::endl;
821 tboccali 1.28 fillSimpleJet(sj,subjet_iter);
822 tboccali 1.31 // if(!runOnMC_)
823     setJecUnc(sj,jecUnc);
824 tboccali 1.28 /* sj.flavour = subjet_iter->partonFlavour();
825 tboccali 1.5 sj.tVector = getTvect(&(*subjet_iter));
826 tboccali 1.1 sj.tche=subjet_iter->bDiscriminator("trackCountingHighEffBJetTags");
827     sj.tchp=subjet_iter->bDiscriminator("trackCountingHighPurBJetTags");
828     sj.jp=subjet_iter->bDiscriminator("jetProbabilityBJetTags");
829     sj.jpb=subjet_iter->bDiscriminator("jetBProbabilityBJetTags");
830     sj.ssvhe=subjet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
831     sj.csv=subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
832     sj.csvmva=subjet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
833     sj.charge=subjet_iter->jetCharge();
834     sj.ntracks=subjet_iter->associatedTracks().size();
835 tboccali 1.13 sj.p4=GENPTOLORP(subjet_iter);
836     sj.p4=(getChargedTracksMomentum(&*(subjet_iter)));
837 tboccali 1.28
838     //
839     // addtaginfo for csv
840     //
841    
842     if (subjet_iter->hasTagInfo("SimpleSecondaryVertex")) {
843    
844     const reco::SecondaryVertexTagInfo * tf = subjet_iter->tagInfoSecondaryVertex();
845     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
846     sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
847     Measurement1D m = tf->flightDistance(0);
848     sj.vtx3dL = m.value();
849     sj.vtx3deL = m.error();
850     }
851     */
852 tboccali 1.1 hbbInfo->subJets.push_back(sj);
853    
854     }
855    
856 dlopes 1.59 for(edm::View<pat::Jet>::const_iterator filterjet_iter = filterjets.begin(); filterjet_iter!=filterjets.end(); ++filterjet_iter){
857    
858     if(printJet) {std::cout << "FilterjetTagged Pt: " << filterjet_iter->pt() << " E,M,eta,phi,Btag: " << filterjet_iter->p4().E() << "," << filterjet_iter->p4().M() << "," << filterjet_iter->eta() << "," << filterjet_iter->phi() << "," << filterjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
859    
860     VHbbEvent::SimpleJet fj;
861     // std::cout <<" sub jet "<<std::endl;
862     fillSimpleJet(fj,filterjet_iter);
863     // if(!runOnMC_)
864     setJecUnc(fj,jecUnc);
865    
866     hbbInfo->filterJets.push_back(fj);
867    
868    
869     }
870    
871 tboccali 1.54 //
872     // add charged met
873     //
874    
875     edm::Handle<edm::View<reco::MET> > metChargedHandle;
876     iEvent.getByLabel("pfMETNoPUCharge",metChargedHandle);
877     edm::View<reco::MET> metsCh = *metChargedHandle;
878     if(metsCh.size()){
879     hbbInfo->metCh.sumEt=(metsCh[0]).sumEt();
880 arizzi 1.56 hbbInfo->metCh.metSig=metSignificance(& (metsCh[0]));
881 tboccali 1.54 hbbInfo->metCh.eLong=(metsCh[0]).e_longitudinal();
882     hbbInfo->metCh.p4=GENPTOLOR((metsCh[0]));
883     if (verbose_) std::cout <<" METCharged "<< hbbInfo->metCh.metSig <<" " << hbbInfo->metCh.sumEt<<std::endl;
884     }
885 tboccali 1.1
886 degrutto 1.62 // type 1 corr met
887     edm::Handle<edm::View<reco::MET> > pfmetType1corrHandle;
888     iEvent.getByLabel("patType1CorrectedPFMet",pfmetType1corrHandle);
889     edm::View<reco::MET> pfmetsType1corr = *pfmetType1corrHandle;
890     if(pfmetsType1corr.size()){
891     hbbInfo->pfmetType1corr.sumEt=(pfmetsType1corr[0]).sumEt();
892     hbbInfo->pfmetType1corr.metSig=metSignificance(& (pfmetsType1corr[0]));
893     hbbInfo->pfmetType1corr.eLong=(pfmetsType1corr[0]).e_longitudinal();
894     hbbInfo->pfmetType1corr.p4=GENPTOLOR((pfmetsType1corr[0]));
895     if (verbose_) std::cout <<" type 1 corrected pfMET "<< hbbInfo->pfmetType1corr.metSig <<" " << hbbInfo->pfmetType1corr.sumEt<<std::endl;
896     }
897    
898    
899     // type 1 + 2 corr met
900     edm::Handle<edm::View<reco::MET> > pfmetType1p2corrHandle;
901     iEvent.getByLabel("patType1p2CorrectedPFMet",pfmetType1p2corrHandle);
902     edm::View<reco::MET> pfmetsType1p2corr = *pfmetType1p2corrHandle;
903     if(pfmetsType1p2corr.size()){
904     hbbInfo->pfmetType1p2corr.sumEt=(pfmetsType1p2corr[0]).sumEt();
905     hbbInfo->pfmetType1p2corr.metSig=metSignificance(& (pfmetsType1p2corr[0]));
906     hbbInfo->pfmetType1p2corr.eLong=(pfmetsType1p2corr[0]).e_longitudinal();
907     hbbInfo->pfmetType1p2corr.p4=GENPTOLOR((pfmetsType1p2corr[0]));
908     if (verbose_) std::cout <<" type 1 +2 corrected pfMET "<< hbbInfo->pfmetType1p2corr.metSig <<" " << hbbInfo->pfmetType1p2corr.sumEt<<std::endl;
909     }
910    
911     // type 1 corr met NoPU
912     edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
913     iEvent.getByLabel("patType1CorrectedPFMetNoPU",pfmetNoPUType1corrHandle);
914     edm::View<reco::MET> pfmetsNoPUType1corr = *pfmetNoPUType1corrHandle;
915     if(pfmetsNoPUType1corr.size()){
916     hbbInfo->pfmetNoPUType1corr.sumEt=(pfmetsNoPUType1corr[0]).sumEt();
917     hbbInfo->pfmetNoPUType1corr.metSig=metSignificance(& (pfmetsNoPUType1corr[0]));
918     hbbInfo->pfmetNoPUType1corr.eLong=(pfmetsNoPUType1corr[0]).e_longitudinal();
919     hbbInfo->pfmetNoPUType1corr.p4=GENPTOLOR((pfmetsNoPUType1corr[0]));
920     if (verbose_) std::cout <<" type 1 corrected pfMET NoPU"<< hbbInfo->pfmetNoPUType1corr.metSig <<" " << hbbInfo->pfmetNoPUType1corr.sumEt<<std::endl;
921     }
922    
923    
924     // type 1 + 2 corr met
925     edm::Handle<edm::View<reco::MET> > pfmetNoPUType1p2corrHandle;
926     iEvent.getByLabel("patType1p2CorrectedPFMetNoPU",pfmetNoPUType1p2corrHandle);
927     edm::View<reco::MET> pfmetsNoPUType1p2corr = *pfmetNoPUType1p2corrHandle;
928     if(pfmetsNoPUType1p2corr.size()){
929     hbbInfo->pfmetNoPUType1p2corr.sumEt=(pfmetsNoPUType1p2corr[0]).sumEt();
930     hbbInfo->pfmetNoPUType1p2corr.metSig=metSignificance(& (pfmetsNoPUType1p2corr[0]));
931     hbbInfo->pfmetNoPUType1p2corr.eLong=(pfmetsNoPUType1p2corr[0]).e_longitudinal();
932     hbbInfo->pfmetNoPUType1p2corr.p4=GENPTOLOR((pfmetsNoPUType1p2corr[0]));
933     if (verbose_) std::cout <<" type 1 +2 corrected pfMET "<< hbbInfo->pfmetNoPUType1p2corr.metSig <<" " << hbbInfo->pfmetNoPUType1p2corr.sumEt<<std::endl;
934     }
935    
936    
937     /*
938     // MET uncertainty vector
939     vector<pat::MET> "patType1CorrectedPFMet" "" "VH"
940     vector<pat::MET> "patType1CorrectedPFMetElectronEnDown" "" "VH"
941     vector<pat::MET> "patType1CorrectedPFMetElectronEnUp" "" "VH"
942     vector<pat::MET> "patType1CorrectedPFMetJetEnDown" "" "VH"
943     vector<pat::MET> "patType1CorrectedPFMetJetEnUp" "" "VH"
944     vector<pat::MET> "patType1CorrectedPFMetJetResDown" "" "VH"
945     vector<pat::MET> "patType1CorrectedPFMetJetResUp" "" "VH"
946     vector<pat::MET> "patType1CorrectedPFMetMuonEnDown" "" "VH"
947     vector<pat::MET> "patType1CorrectedPFMetMuonEnUp" "" "VH"
948     vector<pat::MET> "patType1CorrectedPFMetNoPU" "" "VH"
949     vector<pat::MET> "patType1CorrectedPFMetTauEnDown" "" "VH"
950     vector<pat::MET> "patType1CorrectedPFMetTauEnUp" "" "VH"
951     vector<pat::MET> "patType1CorrectedPFMetUnclusteredEnDown" "" "VH"
952     vector<pat::MET> "patType1CorrectedPFMetUnclusteredEnUp" "" "VH"
953     vector<pat::MET> "patType1p2CorrectedPFMet" "" "VH"
954     vector<pat::MET> "patType1p2CorrectedPFMetElectronEnDown" "" "VH"
955     vector<pat::MET> "patType1p2CorrectedPFMetElectronEnUp" "" "VH"
956     vector<pat::MET> "patType1p2CorrectedPFMetJetEnDown" "" "VH"
957     vector<pat::MET> "patType1p2CorrectedPFMetJetEnUp" "" "VH"
958     vector<pat::MET> "patType1p2CorrectedPFMetJetResDown" "" "VH"
959     vector<pat::MET> "patType1p2CorrectedPFMetJetResUp" "" "VH"
960     vector<pat::MET> "patType1p2CorrectedPFMetMuonEnDown" "" "VH"
961     vector<pat::MET> "patType1p2CorrectedPFMetMuonEnUp" "" "VH"
962     vector<pat::MET> "patType1p2CorrectedPFMetNoPU" "" "VH"
963     vector<pat::MET> "patType1p2CorrectedPFMetTauEnDown" "" "VH"
964     vector<pat::MET> "patType1p2CorrectedPFMetTauEnUp" "" "VH"
965     vector<pat::MET> "patType1p2CorrectedPFMetUnclusteredEnDown" "" "VH"
966     vector<pat::MET> "patType1p2CorrectedPFMetUnclusteredEnUp" "" "VH"
967     */
968    
969     VHbbEvent::METInfo metunc;
970     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetElectronEnDownHandle;
971     iEvent.getByLabel("patType1CorrectedPFMetElectronEnDown",patType1CorrectedPFMetElectronEnDownHandle);
972     edm::View<reco::MET> patType1CorrectedPFMetsElectronEnDown = *patType1CorrectedPFMetElectronEnDownHandle;
973     if(patType1CorrectedPFMetsElectronEnDown.size()){
974     metunc.sumEt =(patType1CorrectedPFMetsElectronEnDown[0]).sumEt();
975     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsElectronEnDown[0]));
976     metunc.eLong=(patType1CorrectedPFMetsElectronEnDown[0]).e_longitudinal();
977     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsElectronEnDown[0]));
978     hbbInfo->metUncInfo.push_back(metunc);
979     }
980    
981     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetElectronEnUpHandle;
982     iEvent.getByLabel("patType1CorrectedPFMetElectronEnUp",patType1CorrectedPFMetElectronEnUpHandle);
983     edm::View<reco::MET> patType1CorrectedPFMetsElectronEnUp = *patType1CorrectedPFMetElectronEnUpHandle;
984     if(patType1CorrectedPFMetsElectronEnUp.size()){
985     metunc.sumEt =(patType1CorrectedPFMetsElectronEnUp[0]).sumEt();
986     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsElectronEnUp[0]));
987     metunc.eLong=(patType1CorrectedPFMetsElectronEnUp[0]).e_longitudinal();
988     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsElectronEnUp[0]));
989     hbbInfo->metUncInfo.push_back(metunc);
990     }
991    
992    
993    
994     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetMuonEnDownHandle;
995     iEvent.getByLabel("patType1CorrectedPFMetMuonEnDown",patType1CorrectedPFMetMuonEnDownHandle);
996     edm::View<reco::MET> patType1CorrectedPFMetsMuonEnDown = *patType1CorrectedPFMetMuonEnDownHandle;
997     if(patType1CorrectedPFMetsMuonEnDown.size()){
998     metunc.sumEt =(patType1CorrectedPFMetsMuonEnDown[0]).sumEt();
999     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsMuonEnDown[0]));
1000     metunc.eLong=(patType1CorrectedPFMetsMuonEnDown[0]).e_longitudinal();
1001     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsMuonEnDown[0]));
1002     hbbInfo->metUncInfo.push_back(metunc);
1003     }
1004    
1005     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetMuonEnUpHandle;
1006     iEvent.getByLabel("patType1CorrectedPFMetMuonEnUp",patType1CorrectedPFMetMuonEnUpHandle);
1007     edm::View<reco::MET> patType1CorrectedPFMetsMuonEnUp = *patType1CorrectedPFMetMuonEnUpHandle;
1008     if(patType1CorrectedPFMetsMuonEnUp.size()){
1009     metunc.sumEt =(patType1CorrectedPFMetsMuonEnUp[0]).sumEt();
1010     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsMuonEnUp[0]));
1011     metunc.eLong=(patType1CorrectedPFMetsMuonEnUp[0]).e_longitudinal();
1012     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsMuonEnUp[0]));
1013     hbbInfo->metUncInfo.push_back(metunc);
1014     }
1015    
1016    
1017    
1018     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetTauEnDownHandle;
1019     iEvent.getByLabel("patType1CorrectedPFMetTauEnDown",patType1CorrectedPFMetTauEnDownHandle);
1020     edm::View<reco::MET> patType1CorrectedPFMetsTauEnDown = *patType1CorrectedPFMetTauEnDownHandle;
1021     if(patType1CorrectedPFMetsTauEnDown.size()){
1022     metunc.sumEt =(patType1CorrectedPFMetsTauEnDown[0]).sumEt();
1023     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsTauEnDown[0]));
1024     metunc.eLong=(patType1CorrectedPFMetsTauEnDown[0]).e_longitudinal();
1025     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsTauEnDown[0]));
1026     hbbInfo->metUncInfo.push_back(metunc);
1027     }
1028    
1029     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetTauEnUpHandle;
1030     iEvent.getByLabel("patType1CorrectedPFMetTauEnUp",patType1CorrectedPFMetTauEnUpHandle);
1031     edm::View<reco::MET> patType1CorrectedPFMetsTauEnUp = *patType1CorrectedPFMetTauEnUpHandle;
1032     if(patType1CorrectedPFMetsTauEnUp.size()){
1033     metunc.sumEt =(patType1CorrectedPFMetsTauEnUp[0]).sumEt();
1034     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsTauEnUp[0]));
1035     metunc.eLong=(patType1CorrectedPFMetsTauEnUp[0]).e_longitudinal();
1036     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsTauEnUp[0]));
1037     hbbInfo->metUncInfo.push_back(metunc);
1038     }
1039    
1040    
1041     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetEnDownHandle;
1042     iEvent.getByLabel("patType1CorrectedPFMetJetEnDown",patType1CorrectedPFMetJetEnDownHandle);
1043     edm::View<reco::MET> patType1CorrectedPFMetsJetEnDown = *patType1CorrectedPFMetJetEnDownHandle;
1044     if(patType1CorrectedPFMetsJetEnDown.size()){
1045     metunc.sumEt =(patType1CorrectedPFMetsJetEnDown[0]).sumEt();
1046     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetEnDown[0]));
1047     metunc.eLong=(patType1CorrectedPFMetsJetEnDown[0]).e_longitudinal();
1048     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetEnDown[0]));
1049     hbbInfo->metUncInfo.push_back(metunc);
1050     }
1051    
1052     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetEnUpHandle;
1053     iEvent.getByLabel("patType1CorrectedPFMetJetEnUp",patType1CorrectedPFMetJetEnUpHandle);
1054     edm::View<reco::MET> patType1CorrectedPFMetsJetEnUp = *patType1CorrectedPFMetJetEnUpHandle;
1055     if(patType1CorrectedPFMetsJetEnUp.size()){
1056     metunc.sumEt =(patType1CorrectedPFMetsJetEnUp[0]).sumEt();
1057     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetEnUp[0]));
1058     metunc.eLong=(patType1CorrectedPFMetsJetEnUp[0]).e_longitudinal();
1059     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetEnUp[0]));
1060     hbbInfo->metUncInfo.push_back(metunc);
1061     }
1062    
1063    
1064     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetResDownHandle;
1065     iEvent.getByLabel("patType1CorrectedPFMetJetResDown",patType1CorrectedPFMetJetResDownHandle);
1066     edm::View<reco::MET> patType1CorrectedPFMetsJetResDown = *patType1CorrectedPFMetJetResDownHandle;
1067     if(patType1CorrectedPFMetsJetResDown.size()){
1068     metunc.sumEt =(patType1CorrectedPFMetsJetResDown[0]).sumEt();
1069     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetResDown[0]));
1070     metunc.eLong=(patType1CorrectedPFMetsJetResDown[0]).e_longitudinal();
1071     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetResDown[0]));
1072     hbbInfo->metUncInfo.push_back(metunc);
1073     }
1074    
1075     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetResUpHandle;
1076     iEvent.getByLabel("patType1CorrectedPFMetJetResUp",patType1CorrectedPFMetJetResUpHandle);
1077     edm::View<reco::MET> patType1CorrectedPFMetsJetResUp = *patType1CorrectedPFMetJetResUpHandle;
1078     if(patType1CorrectedPFMetsJetResUp.size()){
1079     metunc.sumEt =(patType1CorrectedPFMetsJetResUp[0]).sumEt();
1080     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetResUp[0]));
1081     metunc.eLong=(patType1CorrectedPFMetsJetResUp[0]).e_longitudinal();
1082     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetResUp[0]));
1083     hbbInfo->metUncInfo.push_back(metunc);
1084     }
1085    
1086    
1087     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetUnclusteredEnDownHandle;
1088     iEvent.getByLabel("patType1CorrectedPFMetUnclusteredEnDown",patType1CorrectedPFMetUnclusteredEnDownHandle);
1089     edm::View<reco::MET> patType1CorrectedPFMetsUnclusteredEnDown = *patType1CorrectedPFMetUnclusteredEnDownHandle;
1090     if(patType1CorrectedPFMetsUnclusteredEnDown.size()){
1091     metunc.sumEt =(patType1CorrectedPFMetsUnclusteredEnDown[0]).sumEt();
1092     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsUnclusteredEnDown[0]));
1093     metunc.eLong=(patType1CorrectedPFMetsUnclusteredEnDown[0]).e_longitudinal();
1094     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsUnclusteredEnDown[0]));
1095     hbbInfo->metUncInfo.push_back(metunc);
1096     }
1097    
1098     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetUnclusteredEnUpHandle;
1099     iEvent.getByLabel("patType1CorrectedPFMetUnclusteredEnUp",patType1CorrectedPFMetUnclusteredEnUpHandle);
1100     edm::View<reco::MET> patType1CorrectedPFMetsUnclusteredEnUp = *patType1CorrectedPFMetUnclusteredEnUpHandle;
1101     if(patType1CorrectedPFMetsUnclusteredEnUp.size()){
1102     metunc.sumEt =(patType1CorrectedPFMetsUnclusteredEnUp[0]).sumEt();
1103     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsUnclusteredEnUp[0]));
1104     metunc.eLong=(patType1CorrectedPFMetsUnclusteredEnUp[0]).e_longitudinal();
1105     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsUnclusteredEnUp[0]));
1106     hbbInfo->metUncInfo.push_back(metunc);
1107     }
1108    
1109    
1110     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetElectronEnDownHandle;
1111     iEvent.getByLabel("patType1p2CorrectedPFMetElectronEnDown",patType1p2CorrectedPFMetElectronEnDownHandle);
1112     edm::View<reco::MET> patType1p2CorrectedPFMetsElectronEnDown = *patType1p2CorrectedPFMetElectronEnDownHandle;
1113     if(patType1p2CorrectedPFMetsElectronEnDown.size()){
1114     metunc.sumEt =(patType1p2CorrectedPFMetsElectronEnDown[0]).sumEt();
1115     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsElectronEnDown[0]));
1116     metunc.eLong=(patType1p2CorrectedPFMetsElectronEnDown[0]).e_longitudinal();
1117     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsElectronEnDown[0]));
1118     hbbInfo->metUncInfo.push_back(metunc);
1119     }
1120    
1121     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetElectronEnUpHandle;
1122     iEvent.getByLabel("patType1p2CorrectedPFMetElectronEnUp",patType1p2CorrectedPFMetElectronEnUpHandle);
1123     edm::View<reco::MET> patType1p2CorrectedPFMetsElectronEnUp = *patType1p2CorrectedPFMetElectronEnUpHandle;
1124     if(patType1p2CorrectedPFMetsElectronEnUp.size()){
1125     metunc.sumEt =(patType1p2CorrectedPFMetsElectronEnUp[0]).sumEt();
1126     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsElectronEnUp[0]));
1127     metunc.eLong=(patType1p2CorrectedPFMetsElectronEnUp[0]).e_longitudinal();
1128     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsElectronEnUp[0]));
1129     hbbInfo->metUncInfo.push_back(metunc);
1130     }
1131    
1132    
1133    
1134     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetMuonEnDownHandle;
1135     iEvent.getByLabel("patType1p2CorrectedPFMetMuonEnDown",patType1p2CorrectedPFMetMuonEnDownHandle);
1136     edm::View<reco::MET> patType1p2CorrectedPFMetsMuonEnDown = *patType1p2CorrectedPFMetMuonEnDownHandle;
1137     if(patType1p2CorrectedPFMetsMuonEnDown.size()){
1138     metunc.sumEt =(patType1p2CorrectedPFMetsMuonEnDown[0]).sumEt();
1139     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsMuonEnDown[0]));
1140     metunc.eLong=(patType1p2CorrectedPFMetsMuonEnDown[0]).e_longitudinal();
1141     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsMuonEnDown[0]));
1142     hbbInfo->metUncInfo.push_back(metunc);
1143     }
1144    
1145     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetMuonEnUpHandle;
1146     iEvent.getByLabel("patType1p2CorrectedPFMetMuonEnUp",patType1p2CorrectedPFMetMuonEnUpHandle);
1147     edm::View<reco::MET> patType1p2CorrectedPFMetsMuonEnUp = *patType1p2CorrectedPFMetMuonEnUpHandle;
1148     if(patType1p2CorrectedPFMetsMuonEnUp.size()){
1149     metunc.sumEt =(patType1p2CorrectedPFMetsMuonEnUp[0]).sumEt();
1150     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsMuonEnUp[0]));
1151     metunc.eLong=(patType1p2CorrectedPFMetsMuonEnUp[0]).e_longitudinal();
1152     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsMuonEnUp[0]));
1153     hbbInfo->metUncInfo.push_back(metunc);
1154     }
1155    
1156    
1157    
1158     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetTauEnDownHandle;
1159     iEvent.getByLabel("patType1p2CorrectedPFMetTauEnDown",patType1p2CorrectedPFMetTauEnDownHandle);
1160     edm::View<reco::MET> patType1p2CorrectedPFMetsTauEnDown = *patType1p2CorrectedPFMetTauEnDownHandle;
1161     if(patType1p2CorrectedPFMetsTauEnDown.size()){
1162     metunc.sumEt =(patType1p2CorrectedPFMetsTauEnDown[0]).sumEt();
1163     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsTauEnDown[0]));
1164     metunc.eLong=(patType1p2CorrectedPFMetsTauEnDown[0]).e_longitudinal();
1165     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsTauEnDown[0]));
1166     hbbInfo->metUncInfo.push_back(metunc);
1167     }
1168    
1169     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetTauEnUpHandle;
1170     iEvent.getByLabel("patType1p2CorrectedPFMetTauEnUp",patType1p2CorrectedPFMetTauEnUpHandle);
1171     edm::View<reco::MET> patType1p2CorrectedPFMetsTauEnUp = *patType1p2CorrectedPFMetTauEnUpHandle;
1172     if(patType1p2CorrectedPFMetsTauEnUp.size()){
1173     metunc.sumEt =(patType1p2CorrectedPFMetsTauEnUp[0]).sumEt();
1174     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsTauEnUp[0]));
1175     metunc.eLong=(patType1p2CorrectedPFMetsTauEnUp[0]).e_longitudinal();
1176     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsTauEnUp[0]));
1177     hbbInfo->metUncInfo.push_back(metunc);
1178     }
1179    
1180    
1181     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetEnDownHandle;
1182     iEvent.getByLabel("patType1p2CorrectedPFMetJetEnDown",patType1p2CorrectedPFMetJetEnDownHandle);
1183     edm::View<reco::MET> patType1p2CorrectedPFMetsJetEnDown = *patType1p2CorrectedPFMetJetEnDownHandle;
1184     if(patType1p2CorrectedPFMetsJetEnDown.size()){
1185     metunc.sumEt =(patType1p2CorrectedPFMetsJetEnDown[0]).sumEt();
1186     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetEnDown[0]));
1187     metunc.eLong=(patType1p2CorrectedPFMetsJetEnDown[0]).e_longitudinal();
1188     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetEnDown[0]));
1189     hbbInfo->metUncInfo.push_back(metunc);
1190     }
1191    
1192     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetEnUpHandle;
1193     iEvent.getByLabel("patType1p2CorrectedPFMetJetEnUp",patType1p2CorrectedPFMetJetEnUpHandle);
1194     edm::View<reco::MET> patType1p2CorrectedPFMetsJetEnUp = *patType1p2CorrectedPFMetJetEnUpHandle;
1195     if(patType1p2CorrectedPFMetsJetEnUp.size()){
1196     metunc.sumEt =(patType1p2CorrectedPFMetsJetEnUp[0]).sumEt();
1197     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetEnUp[0]));
1198     metunc.eLong=(patType1p2CorrectedPFMetsJetEnUp[0]).e_longitudinal();
1199     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetEnUp[0]));
1200     hbbInfo->metUncInfo.push_back(metunc);
1201     }
1202    
1203    
1204     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetResDownHandle;
1205     iEvent.getByLabel("patType1p2CorrectedPFMetJetResDown",patType1p2CorrectedPFMetJetResDownHandle);
1206     edm::View<reco::MET> patType1p2CorrectedPFMetsJetResDown = *patType1p2CorrectedPFMetJetResDownHandle;
1207     if(patType1p2CorrectedPFMetsJetResDown.size()){
1208     metunc.sumEt =(patType1p2CorrectedPFMetsJetResDown[0]).sumEt();
1209     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetResDown[0]));
1210     metunc.eLong=(patType1p2CorrectedPFMetsJetResDown[0]).e_longitudinal();
1211     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetResDown[0]));
1212     hbbInfo->metUncInfo.push_back(metunc);
1213     }
1214    
1215     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetResUpHandle;
1216     iEvent.getByLabel("patType1p2CorrectedPFMetJetResUp",patType1p2CorrectedPFMetJetResUpHandle);
1217     edm::View<reco::MET> patType1p2CorrectedPFMetsJetResUp = *patType1p2CorrectedPFMetJetResUpHandle;
1218     if(patType1p2CorrectedPFMetsJetResUp.size()){
1219     metunc.sumEt =(patType1p2CorrectedPFMetsJetResUp[0]).sumEt();
1220     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetResUp[0]));
1221     metunc.eLong=(patType1p2CorrectedPFMetsJetResUp[0]).e_longitudinal();
1222     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetResUp[0]));
1223     hbbInfo->metUncInfo.push_back(metunc);
1224     }
1225    
1226    
1227     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetUnclusteredEnDownHandle;
1228     iEvent.getByLabel("patType1p2CorrectedPFMetUnclusteredEnDown",patType1p2CorrectedPFMetUnclusteredEnDownHandle);
1229     edm::View<reco::MET> patType1p2CorrectedPFMetsUnclusteredEnDown = *patType1p2CorrectedPFMetUnclusteredEnDownHandle;
1230     if(patType1p2CorrectedPFMetsUnclusteredEnDown.size()){
1231     metunc.sumEt =(patType1p2CorrectedPFMetsUnclusteredEnDown[0]).sumEt();
1232     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsUnclusteredEnDown[0]));
1233     metunc.eLong=(patType1p2CorrectedPFMetsUnclusteredEnDown[0]).e_longitudinal();
1234     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsUnclusteredEnDown[0]));
1235     hbbInfo->metUncInfo.push_back(metunc);
1236     }
1237    
1238     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetUnclusteredEnUpHandle;
1239     iEvent.getByLabel("patType1p2CorrectedPFMetUnclusteredEnUp",patType1p2CorrectedPFMetUnclusteredEnUpHandle);
1240     edm::View<reco::MET> patType1p2CorrectedPFMetsUnclusteredEnUp = *patType1p2CorrectedPFMetUnclusteredEnUpHandle;
1241     if(patType1p2CorrectedPFMetsUnclusteredEnUp.size()){
1242     metunc.sumEt =(patType1p2CorrectedPFMetsUnclusteredEnUp[0]).sumEt();
1243     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsUnclusteredEnUp[0]));
1244     metunc.eLong=(patType1p2CorrectedPFMetsUnclusteredEnUp[0]).e_longitudinal();
1245     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsUnclusteredEnUp[0]));
1246     hbbInfo->metUncInfo.push_back(metunc);
1247     }
1248    
1249    
1250    
1251 tboccali 1.1 //
1252     // met is calomet
1253     //
1254    
1255     edm::Handle<edm::View<pat::MET> > metTCHandle;
1256     iEvent.getByLabel("patMETsTC",metTCHandle);
1257     edm::View<pat::MET> metsTC = *metTCHandle;
1258 tboccali 1.9 if(metsTC.size()){
1259     hbbInfo->tcmet.sumEt=(metsTC[0]).sumEt();
1260 arizzi 1.56 hbbInfo->tcmet.metSig=metSignificance(&(metsTC[0]));
1261 tboccali 1.9 hbbInfo->tcmet.eLong=(metsTC[0]).e_longitudinal();
1262 tboccali 1.13 hbbInfo->tcmet.p4=GENPTOLOR((metsTC[0]));
1263 tboccali 1.9 if (verbose_) std::cout <<" METTC "<< hbbInfo->tcmet.metSig <<" " << hbbInfo->tcmet.sumEt<<std::endl;
1264     }
1265    
1266 arizzi 1.38 edm::Handle<edm::View<reco::MET> > pfMETNoPUHandle;
1267     iEvent.getByLabel("pfMETNoPU",pfMETNoPUHandle);
1268     edm::View<reco::MET> metspfMETNoPU = *pfMETNoPUHandle;
1269     if(metspfMETNoPU.size()){
1270     hbbInfo->metNoPU.sumEt=(metspfMETNoPU[0]).sumEt();
1271 arizzi 1.56 hbbInfo->metNoPU.metSig=metSignificance(&(metspfMETNoPU[0]));
1272 arizzi 1.38 hbbInfo->metNoPU.eLong=(metspfMETNoPU[0]).e_longitudinal();
1273     hbbInfo->metNoPU.p4=GENPTOLOR((metspfMETNoPU[0]));
1274     if (verbose_) std::cout <<" pfMETNoPU "<< hbbInfo->metNoPU.metSig <<" " << hbbInfo->metNoPU.sumEt<<std::endl;
1275     }
1276 tboccali 1.28
1277 tboccali 1.29 edm::Handle<edm::View<reco::MET> > mHTHandle;
1278 tboccali 1.28 iEvent.getByLabel("patMETsHT",mHTHandle);
1279 tboccali 1.29 edm::View<reco::MET> metsHT = *mHTHandle;
1280 tboccali 1.28 if(metsHT.size()){
1281     hbbInfo->mht.sumEt=(metsHT[0]).sumEt();
1282 arizzi 1.56 hbbInfo->mht.metSig=metSignificance(&(metsHT[0]));
1283 tboccali 1.28 hbbInfo->mht.eLong=(metsHT[0]).e_longitudinal();
1284     hbbInfo->mht.p4=GENPTOLOR((metsHT[0]));
1285     if (verbose_) std::cout <<" METHT "<< hbbInfo->mht.metSig <<" " << hbbInfo->mht.sumEt<<std::endl;
1286     }
1287    
1288 arizzi 1.39 edm::Handle<edm::View<reco::MET> > metHandle;
1289 tboccali 1.28 iEvent.getByLabel(metLabel_,metHandle);
1290 arizzi 1.39 edm::View<reco::MET> mets = *metHandle;
1291 tboccali 1.28
1292 tboccali 1.9 if(mets.size()){
1293     hbbInfo->calomet.sumEt=(mets[0]).sumEt();
1294 arizzi 1.56 hbbInfo->calomet.metSig=metSignificance(&(mets[0]));
1295 tboccali 1.9 hbbInfo->calomet.eLong=(mets[0]).e_longitudinal();
1296 tboccali 1.13 hbbInfo->calomet.p4=GENPTOLOR((mets[0]));
1297 tboccali 1.28 if (verbose_) std::cout <<" METCALO "<< hbbInfo->calomet.metSig <<" " << hbbInfo->calomet.sumEt<<std::endl;
1298 tboccali 1.1 }
1299 tboccali 1.9
1300 tboccali 1.1 edm::Handle<edm::View<pat::MET> > metPFHandle;
1301     iEvent.getByLabel("patMETsPF",metPFHandle);
1302     edm::View<pat::MET> metsPF = *metPFHandle;
1303 tboccali 1.28
1304 tboccali 1.9 if(metsPF.size()){
1305     hbbInfo->pfmet.sumEt=(metsPF[0]).sumEt();
1306 arizzi 1.56 hbbInfo->pfmet.metSig=metSignificance(&(metsPF[0]));
1307 tboccali 1.9 hbbInfo->pfmet.eLong=(metsPF[0]).e_longitudinal();
1308 tboccali 1.13 hbbInfo->pfmet.p4=GENPTOLOR((metsPF[0]));
1309 tboccali 1.28 if (verbose_) std::cout <<" METPF "<< hbbInfo->pfmet.metSig <<" " << hbbInfo->pfmet.sumEt<<std::endl;
1310 tboccali 1.1 }
1311 tboccali 1.28
1312    
1313 tboccali 1.9 if(verbose_){
1314 tboccali 1.28 std::cout << "METs: calomet "<<mets.size()<<" tcmet"<<metsTC.size()<<" pfmet "<<metsPF.size()<<" MHT" <<metsHT.size()<<std::endl;
1315 tboccali 1.9 }
1316    
1317 bortigno 1.25 if(verbose_)
1318     std::cout << " INPUT MUONS "<<muons.size()<<std::endl;
1319 tboccali 1.1
1320     for(edm::View<pat::Muon>::const_iterator mu = muons.begin(); mu!=muons.end(); ++mu){
1321     VHbbEvent::MuonInfo mf;
1322 tboccali 1.13 mf.p4 =GENPTOLORP( mu);
1323 tboccali 1.1 mf.charge=mu->charge();
1324     mf.tIso=mu->trackIso();
1325     mf.eIso=mu->ecalIso();
1326     mf.hIso=mu->hcalIso();
1327 arizzi 1.16 mf.pfChaIso=mu->chargedHadronIso();
1328 degrutto 1.37 mf.pfChaPUIso=mu->userIso(5);
1329 arizzi 1.16 mf.pfPhoIso=mu->photonIso();
1330     mf.pfNeuIso=mu->neutralHadronIso();
1331 tboccali 1.13 Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
1332 tboccali 1.1 double acop = deltaphi.value();
1333     mf.acop=acop;
1334    
1335 tboccali 1.52 mf.emEnergy = mu->calEnergy().em;
1336     mf.hadEnergy = mu->calEnergy().had;
1337    
1338 tboccali 1.45 mf.nMatches = mu->numberOfMatches();
1339    
1340 tboccali 1.1 mf.ipDb=mu->dB();
1341     mf.ipErrDb=mu->edB();
1342 bortigno 1.23 mf.cat=0;
1343 degrutto 1.61
1344 bortigno 1.22 if(mu->isGlobalMuon()) mf.cat|=1;
1345     if(mu->isTrackerMuon()) mf.cat|=2;
1346 bortigno 1.23 if(mu->isStandAloneMuon()) mf.cat|=4;
1347 tboccali 1.1 TrackRef trkMu1Ref = mu->get<TrackRef>();
1348     if(trkMu1Ref.isNonnull()){
1349     const Track* MuTrk1 = mu->get<TrackRef>().get();
1350     mf.zPVPt=MuTrk1->dz(RecVtxFirst.position());
1351     mf.zPVProb=MuTrk1->dz(RecVtx.position());
1352     mf.nHits=MuTrk1->numberOfValidHits();
1353     mf.chi2=MuTrk1->normalizedChi2();
1354     TrackRef iTrack1 = mu->innerTrack();
1355     const reco::HitPattern& p1 = iTrack1->hitPattern();
1356     mf.nPixelHits=p1.pixelLayersWithMeasurement();
1357 tboccali 1.47
1358     mf.nValidTracker = p1.numberOfValidTrackerHits();
1359     mf.nValidPixel = p1.numberOfValidPixelHits();
1360    
1361    
1362    
1363     }
1364 tboccali 1.1 if(mu->isGlobalMuon()){
1365     TrackRef gTrack = mu->globalTrack();
1366     const reco::HitPattern& q = gTrack->hitPattern();
1367     mf.globChi2=gTrack.get()->normalizedChi2();
1368     mf.globNHits=q.numberOfValidMuonHits();
1369 tboccali 1.40 mf.validMuStations = q.muonStationsWithValidHits();
1370 tboccali 1.1 }else{
1371     mf.globChi2=-99;
1372     mf.globNHits=-99;
1373     }
1374 bortigno 1.18
1375     //Muon trigger matching
1376     for (int itrig = 0; itrig != ntrigs; ++itrig){
1377     std::string trigName=triggerNames_.triggerName(itrig);
1378 arizzi 1.26 if( (mu->triggerObjectMatchesByPath(trigName,false,false).size() != 0) ){
1379 bortigno 1.18 mf.hltMatchedBits.push_back(itrig);
1380     if(verbose_){
1381     std::clog << "Trigger Matching box" << std::endl;
1382     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1383     std::clog << "Matching parameters are defined in the cfg" << std::endl;
1384     std::clog << "Trigger bit = " << itrig << std::endl;
1385     std::clog << "Trigger name = " << trigName << std::endl;
1386 arizzi 1.26 std::clog << "Trigger object matched collection size = " << mu->triggerObjectMatchesByPath(trigName,false,false).size() << std::endl;
1387 bortigno 1.18 std::clog << "Pat Muon pt = " << mf.p4.Pt() << " HLT object matched = " << mu->triggerObjectMatch(0)->p4().Pt() << std::endl;
1388     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1389     }
1390     }
1391     }
1392 tboccali 1.8 //
1393 bortigno 1.18
1394 tboccali 1.8 // add stamuon
1395    
1396     // if (mu->isStandAloneMuon()) {
1397     // reco::TrackRef sta = mu->standAloneMuon();
1398     //
1399     // }
1400    
1401 tboccali 1.1
1402     // int muInfo[12];
1403     // fillMuBlock(mu, muInfo);
1404 tboccali 1.3 if(runOnMC_){
1405 tboccali 1.1 const GenParticle* muMc = mu->genLepton();
1406     if(muMc!=0){
1407     mf.mcId=muMc->pdgId();
1408     mf.mcFourMomentum=GENPTOLORP(muMc);
1409     if(muMc->mother()!=0) mf.mcMomId=muMc->mother()->pdgId();
1410     if(muMc->mother()!=0 && muMc->mother()->mother()!=0) mf.mcgMomId=muMc->mother()->mother()->pdgId();
1411     } }
1412     hbbInfo->muInfo.push_back(mf);
1413     }
1414    
1415 tboccali 1.28 if(verbose_)
1416 bortigno 1.25 std::cout << " INPUT electrons "<<electrons.size()<<std::endl;
1417 tboccali 1.1 for(edm::View<pat::Electron>::const_iterator elec = electrons.begin(); elec!=electrons.end(); ++elec){
1418     VHbbEvent::ElectronInfo ef;
1419 tboccali 1.13 ef.p4=GENPTOLORP(elec);
1420 tboccali 1.1 ef.scEta =elec->superCluster()->eta();
1421     ef.scPhi =elec->superCluster()->phi();
1422     // if(ElecEta[eleccont]!=0) ElecEt[eleccont]=elec->superCluster()->energy()/cosh(elec->superCluster()->eta());
1423     ef.charge=elec->charge();
1424     ef.tIso=elec->trackIso();
1425     ef.eIso=elec->ecalIso();
1426     ef.hIso=elec->hcalIso();
1427 arizzi 1.16 ef.pfChaIso=elec->chargedHadronIso();
1428 degrutto 1.37 ef.pfChaPUIso=elec->userIso(5);
1429 arizzi 1.16 ef.pfPhoIso=elec->photonIso();
1430     ef.pfNeuIso=elec->neutralHadronIso();
1431    
1432 tboccali 1.50 //
1433     // ip info
1434     //
1435    
1436     ef.ipDb=elec->dB();
1437     ef.ipErrDb=elec->edB();
1438    
1439    
1440    
1441 arizzi 1.38 Geom::Phi<double> deltaphi(elec->superCluster()->phi()-atan2(hbbInfo->pfmet.p4.Py(),hbbInfo->pfmet.p4.Px()));
1442 tboccali 1.1 ef.acop = deltaphi.value();
1443 tboccali 1.8 //
1444 tboccali 1.48 ef.sihih = elec->sigmaIetaIeta();
1445     ef.Dphi = elec->deltaPhiSuperClusterTrackAtVtx();
1446     ef.Deta = elec->deltaEtaSuperClusterTrackAtVtx();
1447     ef.HoE = elec->hadronicOverEm();
1448     ef.convDist = elec->convDist();
1449     ef.convDcot = elec->convDcot();
1450     if(elec->gsfTrack().isNonnull()) ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();
1451     ef.isEB = elec->isEB();
1452     ef.isEE = elec->isEE();
1453     //
1454 tboccali 1.8 // fill eleids
1455     //
1456 arizzi 1.16 /* ef.id95 = elec->electronID("simpleEleId95cIso");
1457 tboccali 1.8 ef.id85 = elec->electronID("simpleEleId85cIso");
1458     ef.id70 = elec->electronID("simpleEleId70cIso");
1459     ef.id95r = elec->electronID("simpleEleId95relIso");
1460     ef.id70r = elec->electronID("simpleEleId70relIso");
1461     ef.id85r = elec->electronID("simpleEleId85relIso");
1462 arizzi 1.16 */
1463     ef.id95 =elec->electronID("eidVBTFCom95");
1464     ef.id95r=elec->electronID("eidVBTFRel95");
1465     ef.id85 =elec->electronID("eidVBTFCom85");
1466     ef.id85r=elec->electronID("eidVBTFRel85");
1467     ef.id80 =elec->electronID("eidVBTFCom80");
1468     ef.id80r=elec->electronID("eidVBTFRel80");
1469     ef.id70 =elec->electronID("eidVBTFCom70");
1470     ef.id70r=elec->electronID("eidVBTFRel70");
1471 tboccali 1.8
1472 bortigno 1.25 //Electron trigger matching
1473 bortigno 1.18 for (int itrig = 0; itrig != ntrigs; ++itrig){
1474     std::string trigName=triggerNames_.triggerName(itrig);
1475     if( (elec->triggerObjectMatchesByPath(trigName).size() != 0) ){
1476     ef.hltMatchedBits.push_back(itrig);
1477     if(verbose_){
1478     std::clog << "Trigger Matching box" << std::endl;
1479     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1480     std::clog << "Matching parameters are defined in the cfg" << std::endl;
1481     std::clog << "Trigger bit = " << itrig << std::endl;
1482     std::clog << "Trigger name = " << trigName << std::endl;
1483     std::clog << "Trigger object matched collection size = " << elec->triggerObjectMatchesByPath(trigName).size() << std::endl;
1484     std::clog << "Pat Electron pt = " << ef.p4.Pt() << " HLT object matched = " << elec->triggerObjectMatch(0)->p4().Pt() << std::endl;
1485     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1486     }
1487     }
1488     }
1489    
1490 tboccali 1.3 if(runOnMC_){
1491 tboccali 1.1 const GenParticle* elecMc = elec->genLepton();
1492     if(elecMc!=0){
1493     ef.mcId=elecMc->pdgId();
1494     ef.mcFourMomentum=GENPTOLORP(elecMc);
1495     if(elecMc->mother()!=0) ef.mcMomId=elecMc->mother()->pdgId();
1496     if(elecMc->mother()!=0 && elecMc->mother()->mother()!=0) ef.mcgMomId=elecMc->mother()->mother()->pdgId();
1497     }}
1498     hbbInfo->eleInfo.push_back(ef);
1499     }
1500    
1501 bortigno 1.25 if(verbose_)
1502     std::cout << " INPUT taus "<<taus.size()<<std::endl;
1503 tboccali 1.1 for(edm::View<pat::Tau>::const_iterator tau = taus.begin(); tau!=taus.end(); ++tau){
1504     VHbbEvent::TauInfo tf;
1505 tboccali 1.13 tf.p4=GENPTOLORP(tau);
1506 tboccali 1.1 tf.charge=tau->charge();
1507     tf.tIso=tau->trackIso();
1508     tf.eIso=tau->ecalIso();
1509     tf.hIso=tau->hcalIso();
1510 arizzi 1.38 Geom::Phi<double> deltaphi(tau->phi()-atan2(hbbInfo->pfmet.p4.Py(),hbbInfo->pfmet.p4.Px()));
1511 tboccali 1.1 double acop = deltaphi.value();
1512     tf.acop=acop;
1513 sethzenz 1.63 if (tau->isTauIDAvailable("againstElectronLoose")) tf.againstElectronLoose=tau->tauID("againstElectronLoose");
1514     if (tau->isTauIDAvailable("againstElectronMedium")) tf.againstElectronMedium=tau->tauID("againstElectronMedium");
1515     if (tau->isTauIDAvailable("againstElectronTight")) tf.againstElectronTight=tau->tauID("againstElectronTight");
1516     if (tau->isTauIDAvailable("againstMuonLoose")) tf.againstMuonLoose=tau->tauID("againstMuonLoose");
1517     if (tau->isTauIDAvailable("againstMuonTight")) tf.againstMuonTight=tau->tauID("againstMuonTight");
1518     if (tau->isTauIDAvailable("byLooseIsolation")) tf.byLooseIsolation=tau->tauID("byLooseIsolation");
1519     if (tau->isTauIDAvailable("byMediumIsolation")) tf.byMediumIsolation=tau->tauID("byMediumIsolation");
1520     if (tau->isTauIDAvailable("byTightIsolation")) tf.byTightIsolation=tau->tauID("byTightIsolation");
1521     if (tau->isTauIDAvailable("byVLooseIsolation")) tf.byVLooseIsolation=tau->tauID("byVLooseIsolation");
1522     if (tau->isTauIDAvailable("decayModeFinding")) tf.decayModeFinding=tau->tauID("decayModeFinding");
1523     if (tau->isTauIDAvailable("byIsolation")) tf.byIsolation=tau->tauID("byIsolation");
1524     if (tau->isTauIDAvailable("trackIsolation")) tf.trackIsolation=tau->tauID("trackIsolation");
1525     if (tau->isTauIDAvailable("byTaNCfrOnePercent")) tf.byTaNCfrOnePercent=tau->tauID("byTaNCfrOnePercent");
1526     if (tau->isTauIDAvailable("byTaNCfrHalfPercent")) tf.byTaNCfrHalfPercent=tau->tauID("byTaNCfrHalfPercent");
1527     if (tau->isTauIDAvailable("byTaNCfrQuarterPercent")) tf.byTaNCfrQuarterPercent=tau->tauID("byTaNCfrQuarterPercent");
1528     if (tau->isTauIDAvailable("byTaNCfrTenthPercent")) tf.byTaNCfrTenthPercent=tau->tauID("byTaNCfrTenthPercent");
1529     if (tau->isTauIDAvailable("byTaNC")) tf.byTaNC=tau->tauID("byTaNC");
1530     if (tau->isTauIDAvailable("byLooseCombinedIsolationDeltaBetaCorr")) tf.byLooseCombinedIsolationDeltaBetaCorr=tau->tauID("byLooseCombinedIsolationDeltaBetaCorr");
1531     if (tau->isTauIDAvailable("againstElectronMVA")) tf.againstElectronMVA=tau->tauID("againstElectronMVA");
1532 dlopes 1.59 if (tau->isPFTau()) {
1533     tf.isolationPFChargedHadrCandsPtSum = tau->isolationPFChargedHadrCandsPtSum();
1534     tf.isolationPFGammaCandsEtSum = tau->isolationPFGammaCandsEtSum();
1535 sethzenz 1.63 if (tau->leadPFChargedHadrCand().isAvailable()) tf.leadPFChargedHadrCandPt = tau->leadPFChargedHadrCand()->pt();
1536 sethzenz 1.60 tf.NsignalPFChargedHadrCands = tau->signalPFChargedHadrCands().size();
1537     tf.NsignalPFGammaCands = tau->signalPFGammaCands().size();
1538 dlopes 1.59 }
1539 tboccali 1.1 hbbInfo->tauInfo.push_back(tf);
1540 dlopes 1.59 if (verbose_) {
1541 sethzenz 1.63 std::cout << "SCZ DEBUG: againstElectronLoose is " << tf.againstElectronLoose << std::endl;
1542     std::cout << "SCZ DEBUG: againstElectronMedium is " << tf.againstElectronMedium << std::endl;
1543     std::cout << "SCZ DEBUG: againstElectronTight is " << tf.againstElectronTight << std::endl;
1544     std::cout << "SCZ DEBUG: againstMuonLoose is " << tf.againstMuonLoose << std::endl;
1545     std::cout << "SCZ DEBUG: againstMuonTight is " << tf.againstMuonTight << std::endl;
1546     std::cout << "SCZ DEBUG: byLooseIsolation is " << tf.byLooseIsolation << std::endl;
1547     std::cout << "SCZ DEBUG: byMediumIsolation is " << tf.byMediumIsolation << std::endl;
1548     std::cout << "SCZ DEBUG: byTightIsolation is " << tf.byTightIsolation << std::endl;
1549     std::cout << "SCZ DEBUG: byVLooseIsolation is " << tf.byVLooseIsolation << std::endl;
1550     std::cout << "SCZ DEBUG: decayModeFinding is " << tf.decayModeFinding << std::endl;
1551     std::cout << "SCZ DEBUG: byIsolation is " << tf.byIsolation<< std::endl;
1552     std::cout << "SCZ DEBUG: trackIsolation is " << tf.trackIsolation << std::endl;
1553     std::cout << "SCZ DEBUG: byTaNCfrOnePercent is " << tf.byTaNCfrOnePercent << std::endl;
1554     std::cout << "SCZ DEBUG: byTaNCfrHalfPercent is " << tf.byTaNCfrHalfPercent << std::endl;
1555     std::cout << "SCZ DEBUG: byTaNCfrQuarterPercent is " << tf.byTaNCfrQuarterPercent << std::endl;
1556     std::cout << "SCZ DEBUG: byTaNCfrTenthPercent is " << tf.byTaNCfrTenthPercent << std::endl;
1557     std::cout << "SCZ DEBUG: byTaNC is " << tf.byTaNC << std::endl;
1558 dlopes 1.59 std::cout << "SCZ DEBUG: isolationPFChargedHadrCandsPtSum is " << tf.isolationPFChargedHadrCandsPtSum << std::endl;
1559     std::cout << "SCZ DEBUG: isolationPFGammaCandsEtSum is " << tf.isolationPFGammaCandsEtSum << std::endl;
1560     std::cout << "SCZ DEBUG: isolationPFGammaCandsEtSum is " << tf.leadPFChargedHadrCandPt << std::endl;
1561 sethzenz 1.60 std::cout << "SCZ DEBUG: NsignalPFChargedHadrCands is " << tf.NsignalPFChargedHadrCands << std::endl;
1562     std::cout << "SCZ DEBUG: NsignalPFGammaCands is " << tf.NsignalPFGammaCands << std::endl;
1563 sethzenz 1.63 std::cout << "SCZ DEBUG: byLooseCombinedIsolationDeltaBetaCorr is " << tf.byLooseCombinedIsolationDeltaBetaCorr << std::endl;
1564     std::cout << "SCZ DEBUG: againstElectronMVA is " << tf.againstElectronMVA << std::endl;
1565 dlopes 1.59 }
1566 tboccali 1.1 }
1567    
1568 tboccali 1.28 CompareJetPtMuons ptComparatorMu;
1569     CompareJetPtElectrons ptComparatorE;
1570     CompareJetPtTaus ptComparatorTau;
1571    
1572     std::sort(hbbInfo->muInfo.begin(), hbbInfo->muInfo.end(), ptComparatorMu);
1573     std::sort(hbbInfo->eleInfo.begin(), hbbInfo->eleInfo.end(), ptComparatorE);
1574     std::sort(hbbInfo->tauInfo.begin(), hbbInfo->tauInfo.end(), ptComparatorTau);
1575    
1576 tboccali 1.1
1577    
1578    
1579 tboccali 1.9 if (verbose_){
1580     std::cout <<" Pushing hbbInfo "<<std::endl;
1581     std::cout <<" SimpleJets1 = "<<hbbInfo->simpleJets.size()<<std::endl<<
1582     " SimpleJets2 = "<<hbbInfo->simpleJets2.size()<<std::endl<<
1583     " SubJets = "<<hbbInfo->subJets.size()<<std::endl<<
1584     " HardJets = "<<hbbInfo->hardJets.size()<<std::endl<<
1585 dlopes 1.59 " FilterJets = "<<hbbInfo->filterJets.size()<<std::endl<<
1586 tboccali 1.9 " Muons = "<<hbbInfo->muInfo.size()<<std::endl<<
1587     " Electrons = "<<hbbInfo->eleInfo.size()<<std::endl<<
1588     " Taus = "<<hbbInfo->tauInfo.size()<<std::endl<<
1589     " Electrons = "<<hbbInfo->eleInfo.size()<<std::endl<<
1590     "--------------------- "<<std::endl;
1591     }
1592    
1593    
1594 tboccali 1.1 iEvent.put(hbbInfo);
1595 tboccali 1.14 iEvent.put(auxInfo);
1596 tboccali 1.1
1597 tboccali 1.9
1598 tboccali 1.53 delete jecUnc;
1599    
1600 tboccali 1.1 }
1601    
1602     void
1603     HbbAnalyzerNew::fillMuBlock(edm::View<pat::Muon>::const_iterator mu, int muInfo[15])
1604     {
1605     if(muon::isGoodMuon(*mu,muon::TMLastStationLoose)) muInfo[0]=1;
1606     if(muon::isGoodMuon(*mu,muon::TMLastStationTight)) muInfo[1]=1;
1607     if(muon::isGoodMuon(*mu,muon::TM2DCompatibilityLoose)) muInfo[2]=1;
1608     if(muon::isGoodMuon(*mu,muon::TM2DCompatibilityTight)) muInfo[3]=1;
1609     if(muon::isGoodMuon(*mu,muon::TMOneStationLoose)) muInfo[4]=1;
1610     if(muon::isGoodMuon(*mu,muon::TMOneStationTight)) muInfo[5]=1;
1611     if(muon::isGoodMuon(*mu,muon::TMLastStationOptimizedLowPtLoose)) muInfo[6]=1;
1612     if(muon::isGoodMuon(*mu,muon::TMLastStationOptimizedLowPtTight))muInfo[7]=1;
1613     if(muon::isGoodMuon(*mu,muon::TMOneStationAngLoose)) muInfo[8]=1;
1614     if(muon::isGoodMuon(*mu,muon::TMOneStationAngTight)) muInfo[9]=1;
1615     if(muon::isGoodMuon(*mu,muon::TMLastStationAngLoose)) muInfo[10]=1;
1616     if(muon::isGoodMuon(*mu,muon::TMLastStationAngTight)) muInfo[11]=1;
1617     if(muon::isGoodMuon(*mu,muon::GMTkChiCompatibility)) muInfo[12]=1;
1618     if(muon::isGoodMuon(*mu,muon::GMStaChiCompatibility)) muInfo[13]=1;
1619     if(muon::isGoodMuon(*mu,muon::GMTkKinkTight)) muInfo[14]=1;
1620     }
1621    
1622     // ------------ method called once each job just before starting event loop ------------
1623     void
1624     HbbAnalyzerNew::beginJob(){
1625     }
1626    
1627    
1628     // ------------ method called once each job just after ending the event loop ------------
1629     void
1630     HbbAnalyzerNew::endJob() {
1631     }
1632    
1633 tboccali 1.5 TVector2 HbbAnalyzerNew::getTvect( const pat::Jet* patJet ){
1634    
1635     TVector2 t_Vect(0,0);
1636     TVector2 null(0,0);
1637     TVector2 ci(0,0);
1638     TLorentzVector pi(0,0,0,0);
1639     TLorentzVector J(0,0,0,0);
1640     TVector2 r(0,0);
1641     double patJetpfcPt = 1e10;
1642     double r_mag = 1e10;
1643     unsigned int nOfconst = 0;
1644    
1645 tboccali 1.6
1646     if (patJet->isPFJet() == false) {
1647     return t_Vect;
1648     }
1649    
1650    
1651     //re-reconstruct the jet direction with the charged tracks
1652 tboccali 1.5 std::vector<reco::PFCandidatePtr>
1653     patJetpfc = patJet->getPFConstituents();
1654     for(size_t idx = 0; idx < patJetpfc.size(); idx++){
1655     if( patJetpfc.at(idx)->charge() != 0 ){
1656     pi.SetPtEtaPhiE( patJetpfc.at(idx)->pt(), patJetpfc.at(idx)->eta(), patJetpfc.at(idx)->phi(), patJetpfc.at(idx)->energy() );
1657     J += pi;
1658     nOfconst++;
1659     }
1660     }
1661     // if there are less than two charged tracks do not calculate the pull (there is not enough info). It returns a null vector
1662    
1663     if( nOfconst < 2 )
1664     return null;
1665 tboccali 1.6
1666    
1667 tboccali 1.5
1668     TVector2 v_J( J.Rapidity(), J.Phi() );
1669     //calculate TVector using only charged tracks
1670     for(size_t idx = 0; idx < patJetpfc.size(); idx++){
1671     if( patJetpfc.at(idx)->charge() != 0 ){
1672     patJetpfcPt = patJetpfc.at(idx)->pt();
1673     pi.SetPtEtaPhiE( patJetpfc.at(idx)->pt(), patJetpfc.at(idx)->eta(), patJetpfc.at(idx)->phi(), patJetpfc.at(idx)->energy() );
1674     r.Set( pi.Rapidity() - J.Rapidity(), Geom::deltaPhi( patJetpfc.at(idx)->phi(), J.Phi() ) );
1675     r_mag = r.Mod();
1676     t_Vect += ( patJetpfcPt / J.Pt() ) * r_mag * r;
1677     }
1678     }
1679    
1680 tboccali 1.6
1681 tboccali 1.5 return t_Vect;
1682    
1683     }
1684    
1685 tboccali 1.6 TLorentzVector HbbAnalyzerNew::getChargedTracksMomentum(const pat::Jet* patJet ){
1686     // return TLorentzVector();
1687     TLorentzVector pi(0,0,0,0);
1688     TLorentzVector v_j1(0,0,0,0);
1689    
1690    
1691     // std::cout <<"fff ECCCCCCOOOOO "<<patJet->isPFJet()<<std::endl;
1692    
1693     if (patJet->isPFJet() == false ){
1694     v_j1 = GENPTOLORP(patJet);
1695     return v_j1;
1696     }
1697     std::vector<reco::PFCandidatePtr>
1698     j1pfc = patJet->getPFConstituents();
1699     for(size_t idx = 0; idx < j1pfc.size(); idx++){
1700     if( j1pfc.at(idx)->charge() != 0 ){
1701     pi.SetPtEtaPhiE( j1pfc.at(idx)->pt(), j1pfc.at(idx)->eta(), j1pfc.at(idx)->phi(), j1pfc.at(idx)->energy() );
1702     v_j1 += pi;
1703     }
1704     }
1705     return v_j1;
1706     //re-
1707     }
1708 tboccali 1.5
1709 bortigno 1.24
1710     //Btagging scale factors
1711 tboccali 1.33 void HbbAnalyzerNew::fillScaleFactors(VHbbEvent::SimpleJet& sj, BTagSFContainer iSF){
1712 bortigno 1.24
1713    
1714     BinningPointByMap measurePoint;
1715     //for a USDG
1716     //for CB jets
1717     //scale factor 1 for CB jets over 240GeV/c
1718     if( TMath::Abs(sj.flavour) == 4 or TMath::Abs(sj.flavour) == 5 ){
1719     measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
1720     measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
1721     if( iSF.BTAGSF_CSVL->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1722     sj.SF_CSVL = iSF.BTAGSF_CSVL->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1723     sj.SF_CSVLerr = iSF.BTAGSF_CSVL->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1724     if(verbose_){
1725     std::clog << "C/B Jet flavour = " << sj.flavour << std::endl;
1726     std::clog << "C/B Jet Et = " << sj.p4.Et() << std::endl;
1727     std::clog << "C/B Jet eta = " << sj.p4.Eta() << std::endl;
1728     std::clog << "C/B CSVL Scale Factor = " << sj.SF_CSVL << std::endl;
1729     std::clog << "C/B CSVL Scale Factor error = " << sj.SF_CSVLerr << std::endl;
1730     }
1731     }
1732     if( iSF.BTAGSF_CSVM->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1733     sj.SF_CSVM = iSF.BTAGSF_CSVM->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1734     sj.SF_CSVMerr = iSF.BTAGSF_CSVM->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1735     }
1736     if( iSF.BTAGSF_CSVT->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1737     sj.SF_CSVT = iSF.BTAGSF_CSVT->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1738     sj.SF_CSVTerr = iSF.BTAGSF_CSVT->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1739     }
1740     else{
1741     if(verbose_){
1742 bortigno 1.25 std::cerr << "No SF found in the database for this jet" << std::endl;
1743 bortigno 1.24 std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
1744     std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
1745     std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
1746     }
1747     }
1748     }
1749     else {
1750     measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
1751     measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
1752     if( iSF.MISTAGSF_CSVL->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1753     sj.SF_CSVL = iSF.MISTAGSF_CSVL->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1754     sj.SF_CSVLerr = iSF.MISTAGSF_CSVL->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1755     if(verbose_){
1756     std::clog << "Light Jet flavour = " << sj.flavour << std::endl;
1757     std::clog << "Light Jet Et = " << sj.p4.Et() << std::endl;
1758     std::clog << "Light Jet eta = " << sj.p4.Eta() << std::endl;
1759     std::clog << "Light CSVL Scale Factor = " << sj.SF_CSVL << std::endl;
1760     std::clog << "Light CSVL Scale Factor error = " << sj.SF_CSVLerr << std::endl;
1761     }
1762     }
1763     if( iSF.MISTAGSF_CSVM->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1764     sj.SF_CSVM = iSF.MISTAGSF_CSVM->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1765     sj.SF_CSVMerr = iSF.MISTAGSF_CSVM->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1766     }
1767     if( iSF.MISTAGSF_CSVT->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1768     sj.SF_CSVT = iSF.MISTAGSF_CSVT->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1769     sj.SF_CSVTerr = iSF.MISTAGSF_CSVT->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1770     }
1771     else{
1772     if(verbose_){
1773 bortigno 1.25 std::cerr << "No SF found in the database for this jet" << std::endl;
1774 bortigno 1.24 std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
1775     std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
1776     std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
1777     }
1778     }
1779     }
1780    
1781     }
1782    
1783 tboccali 1.28 void HbbAnalyzerNew::setJecUnc(VHbbEvent::SimpleJet& sj,JetCorrectionUncertainty* jecunc){
1784 tboccali 1.29 //
1785     // test
1786     //
1787    
1788 tboccali 1.49 // return;
1789 tboccali 1.28 double eta = sj.p4.Eta();
1790     double pt = sj.p4.Pt();
1791    
1792     jecunc->setJetEta(eta);
1793     jecunc->setJetPt(pt); // here you must use the CORRECTED jet pt
1794     double unc = jecunc->getUncertainty(true);
1795     sj.jecunc= unc;
1796     }
1797    
1798    
1799     void HbbAnalyzerNew ::fillSimpleJet (VHbbEvent::SimpleJet& sj, edm::View<pat::Jet>::const_iterator jet_iter){
1800     sj.flavour = jet_iter->partonFlavour();
1801    
1802     sj.tche=jet_iter->bDiscriminator("trackCountingHighEffBJetTags");
1803     sj.tchp=jet_iter->bDiscriminator("trackCountingHighPurBJetTags");
1804     sj.jp=jet_iter->bDiscriminator("jetProbabilityBJetTags");
1805     sj.jpb=jet_iter->bDiscriminator("jetBProbabilityBJetTags");
1806     sj.ssvhe=jet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1807     sj.csv=jet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
1808 arizzi 1.65 sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
1809     sj.csvivf=jet_iter->bDiscriminator("combinedInclusiveSecondaryVertexBJetTags");
1810     sj.cmva=jet_iter->bDiscriminator("combinedMVABJetTags");
1811 tboccali 1.28 sj.charge=jet_iter->jetCharge();
1812     sj.ntracks=jet_iter->associatedTracks().size();
1813     sj.p4=GENPTOLORP(jet_iter);
1814 tboccali 1.44 // std::cout << " ECCO "<<sj.csv<< " "<< sj.p4.Pt()<<std::endl;
1815 tboccali 1.28 sj.chargedTracksFourMomentum=(getChargedTracksMomentum(&*(jet_iter)));
1816     sj.SF_CSVL=1;
1817     sj.SF_CSVM=1;
1818     sj.SF_CSVT=1;
1819     sj.SF_CSVLerr=0;
1820     sj.SF_CSVMerr=0;
1821     sj.SF_CSVTerr=0;
1822    
1823    
1824 tboccali 1.29 if (jet_iter->isPFJet() == true) {
1825 tboccali 1.28
1826 tboccali 1.29 sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction();
1827     sj.neutralHadronEFraction = jet_iter-> neutralHadronEnergyFraction ();
1828     sj.chargedEmEFraction = jet_iter-> chargedEmEnergyFraction ();
1829     sj.neutralEmEFraction = jet_iter-> neutralEmEnergyFraction ();
1830 tboccali 1.40 sj.nConstituents = jet_iter->getPFConstituents().size();
1831 tboccali 1.29
1832     }
1833 tboccali 1.28 //
1834     // addtaginfo for csv
1835     //
1836    
1837     // if (jet_iter->hasTagInfo("SimpleSecondaryVertex")) {
1838    
1839     const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
1840 tboccali 1.31 if (tf){
1841 arizzi 1.66 math::XYZTLorentzVectorD vertexSum;
1842     for(size_t vi=0;vi< tf->nVertices();vi++)
1843     {
1844     vertexSum+=tf->secondaryVertex(vi).p4();
1845     }
1846     sj.vtxP4 = GENPTOLOR(vertexSum);
1847    
1848 tboccali 1.32 if (tf->nVertices() >0){
1849 arizzi 1.66 sj.vtxPosition = TVector3(tf->secondaryVertex(0).position().x(),tf->secondaryVertex(0).position().y(),tf->secondaryVertex(0).position().z());
1850     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
1851 tboccali 1.32 sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
1852     std::vector<reco::TrackBaseRef >::const_iterator tit = tf->secondaryVertex(0).tracks_begin();
1853     for (; tit< tf->secondaryVertex(0).tracks_end(); ++tit){
1854     sj.vtxTrackIds.push_back(tit->key());
1855     }
1856     Measurement1D m = tf->flightDistance(0);
1857     sj.vtx3dL = m.value();
1858     sj.vtx3deL = m.error();
1859     }
1860 tboccali 1.28 }
1861     //
1862     // add tVector
1863     //
1864     sj.tVector = getTvect(&(*jet_iter));
1865 degrutto 1.58
1866 dlopes 1.67 sj.ptRaw = jet_iter->correctedJet(0).pt();
1867    
1868     sj.ptLeadTrack =-9999.;
1869     if (jet_iter->isPFJet() == true) {
1870     std::vector <reco::PFCandidatePtr> constituents = jet_iter->getPFConstituents ();
1871     for (unsigned ic = 0; ic < constituents.size (); ++ic) {
1872     if ( constituents[ic]->particleId() > 3 ) continue;
1873     reco::TrackRef trackRef = constituents[ic]->trackRef();
1874     if ( trackRef.isNonnull() ) { if(trackRef->pt() > sj.ptLeadTrack) sj.ptLeadTrack=trackRef->pt(); }
1875     }
1876     }
1877    
1878 degrutto 1.58
1879 tboccali 1.28 }
1880    
1881 arizzi 1.56 float HbbAnalyzerNew::metSignificance(const reco::MET * met)
1882     {
1883     double sigmaX2= met->getSignificanceMatrix()(0,0);
1884     double sigmaY2= met->getSignificanceMatrix()(1,1);
1885     double significance = 0;
1886     try {
1887     if(sigmaX2<1.e10 && sigmaY2<1.e10) significance = met->significance();
1888     }
1889     catch(...)
1890     {
1891     std::cout << "PROBLEM WITH MET SIGNIFICANCE sigma X2 and Y2 are: " << sigmaX2 << " " << sigmaY2 << std::endl;
1892     }
1893     return significance;
1894     }
1895    
1896 tboccali 1.28
1897 tboccali 1.1 //define this as a plug-in
1898     DEFINE_FWK_MODULE(HbbAnalyzerNew);