ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbAnalyzerNew.cc
Revision: 1.68
Committed: Thu Apr 5 22:51:25 2012 UTC (13 years, 1 month ago) by malbouis
Content type: text/plain
Branch: MAIN
CVS Tags: V21TauCand_0, TauCandidates_0, V21emuCand, EdmV21Apr10
Branch point for: V21TauCand, TauCandidatesV21, V21emuCandidate
Changes since 1.67: +35 -2 lines
Log Message:
add variables for track sharing flags

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 malbouis 1.68 // $Id: HbbAnalyzerNew.cc,v 1.67 2012/04/05 13:49:53 dlopes 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 malbouis 1.68
428     //Get the computer for the CSV
429     ESHandle<JetTagComputer> handle;
430     iSetup.get<JetTagComputerRecord>().get("combinedSecondaryVertex", handle);
431     computer = dynamic_cast<const GenericMVAJetTagComputer*>(handle.product());
432 tboccali 1.1
433 bortigno 1.19 //BTAGGING SCALE FACTOR FROM DATABASE
434     //Combined Secondary Vertex Loose
435     edm::ESHandle<BtagPerformance> bTagSF_CSVL_;
436     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVL",bTagSF_CSVL_);
437     //Combined Secondary Vertex Medium
438     edm::ESHandle<BtagPerformance> bTagSF_CSVM_;
439     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVM",bTagSF_CSVM_);
440     //Combined Secondary Vertex Tight
441     edm::ESHandle<BtagPerformance> bTagSF_CSVT_;
442     iSetup.get<BTagPerformanceRecord>().get("BTAGCSVT",bTagSF_CSVT_);
443    
444 bortigno 1.21 edm::ESHandle<BtagPerformance> mistagSF_CSVL_;
445     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVL",mistagSF_CSVL_);
446     //Combined Secondary Vertex Medium
447     edm::ESHandle<BtagPerformance> mistagSF_CSVM_;
448     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVM",mistagSF_CSVM_);
449     //Combined Secondary Vertex Tight
450     edm::ESHandle<BtagPerformance> mistagSF_CSVT_;
451     iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVT",mistagSF_CSVT_);
452    
453 arizzi 1.27 BTagSFContainer btagSFs;
454     btagSFs.BTAGSF_CSVL = (bTagSF_CSVL_.product());
455     btagSFs.BTAGSF_CSVM = (bTagSF_CSVM_.product());
456     btagSFs.BTAGSF_CSVT = (bTagSF_CSVT_.product());
457     btagSFs.MISTAGSF_CSVL = (mistagSF_CSVL_.product());
458     btagSFs.MISTAGSF_CSVM = (mistagSF_CSVM_.product());
459     btagSFs.MISTAGSF_CSVT = (mistagSF_CSVT_.product());
460 tboccali 1.1
461 arizzi 1.34 #ifdef ENABLE_SIMPLEJETS1
462 tboccali 1.1 for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
463     // if(jet_iter->pt()>50)
464     // njetscounter++;
465     VHbbEvent::SimpleJet sj;
466 tboccali 1.44 // std::cout <<" sj1"<<std::endl;
467 tboccali 1.28 fillSimpleJet(sj,jet_iter);
468 tboccali 1.31 // if(!runOnMC_)
469 tboccali 1.28
470 tboccali 1.31 setJecUnc(sj,jecUnc);
471 tboccali 1.28
472 tboccali 1.1 Particle::LorentzVector p4Jet = jet_iter->p4();
473    
474 tboccali 1.3 if(runOnMC_){
475 bortigno 1.19
476 arizzi 1.27 fillScaleFactors(sj, btagSFs);
477 bortigno 1.24
478     //PAT genJet matching
479     //genJet
480     const reco::GenJet *gJ = jet_iter->genJet();
481     //physical parton for mother info ONLY
482 bortigno 1.43 if( (jet_iter->genParton()) ){
483     sj.bestMCid = jet_iter->genParton()->pdgId();
484     if( (jet_iter->genParton()->mother()) )
485     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
486     }
487 bortigno 1.24 TLorentzVector gJp4;
488     if(gJ){
489     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
490 bortigno 1.43 sj.bestMCp4 = gJp4;
491 bortigno 1.24 if(verbose_){
492     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
493     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
494 tboccali 1.28 std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
495 bortigno 1.24 std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
496 tboccali 1.1 }
497     }
498 bortigno 1.24
499 bortigno 1.20 } //isMC
500 tboccali 1.1 hbbInfo->simpleJets.push_back(sj);
501    
502     }
503 arizzi 1.34 #endif //ENABLE_SIMPLEJETS1
504 tboccali 1.30
505     for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets3.begin(); jet_iter!=simplejets3.end(); ++jet_iter){
506     // if(jet_iter->pt()>50)
507     // njetscounter++;
508     VHbbEvent::SimpleJet sj;
509 tboccali 1.44 // std::cout <<" sj3"<<std::endl;
510 tboccali 1.30 fillSimpleJet(sj,jet_iter);
511 tboccali 1.31 // if(!runOnMC_)
512     setJecUnc(sj,jecUnc);
513 tboccali 1.30
514 tboccali 1.31 Particle::LorentzVector p4Jet = jet_iter->p4();
515 tboccali 1.30
516     if(runOnMC_){
517    
518     fillScaleFactors(sj, btagSFs);
519    
520     //PAT genJet matching
521     //genJet
522     const reco::GenJet *gJ = jet_iter->genJet();
523     //physical parton for mother info ONLY
524 bortigno 1.43 if( (jet_iter->genParton()) ){
525     sj.bestMCid = jet_iter->genParton()->pdgId();
526     if( (jet_iter->genParton()->mother()) )
527     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
528     }
529 tboccali 1.30 TLorentzVector gJp4;
530     if(gJ){
531     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
532 bortigno 1.43 sj.bestMCp4 = gJp4;
533 tboccali 1.30 if(verbose_){
534     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
535     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
536     std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
537     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
538     }
539     }
540    
541     } //isMC
542 degrutto 1.58 //
543    
544    
545 tboccali 1.30 hbbInfo->simpleJets3.push_back(sj);
546    
547     }
548    
549 arizzi 1.34 #ifdef ENABLE_SIMPLEJETS4
550 tboccali 1.30 for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets4.begin(); jet_iter!=simplejets4.end(); ++jet_iter){
551     // if(jet_iter->pt()>50)
552     // njetscounter++;
553     VHbbEvent::SimpleJet sj;
554 tboccali 1.44 // std::cout <<" sj4"<<std::endl;
555 tboccali 1.30 fillSimpleJet(sj,jet_iter);
556 tboccali 1.31 // if(!runOnMC_)
557     setJecUnc(sj,jecUnc);
558 tboccali 1.30
559    
560     Particle::LorentzVector p4Jet = jet_iter->p4();
561    
562     if(runOnMC_){
563    
564     fillScaleFactors(sj, btagSFs);
565    
566     //PAT genJet matching
567     //genJet
568     const reco::GenJet *gJ = jet_iter->genJet();
569     //physical parton for mother info ONLY
570 bortigno 1.43 if( (jet_iter->genParton()) ){
571     sj.bestMCid = jet_iter->genParton()->pdgId();
572     if( (jet_iter->genParton()->mother()) )
573     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
574     }
575 tboccali 1.30 TLorentzVector gJp4;
576     if(gJ){
577     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
578 bortigno 1.43 sj.bestMCp4 = gJp4;
579 tboccali 1.30 if(verbose_){
580     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
581     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
582     std::clog << "genJet matched deltaR = " <<gJp4.DeltaR(sj.p4) << std::endl;
583     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
584     }
585     }
586    
587     } //isMC
588     hbbInfo->simpleJets4.push_back(sj);
589    
590     }
591 arizzi 1.34 #endif //ENABLE SIMPLEJETS4
592    
593 tboccali 1.1
594     for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets2.begin(); jet_iter!=simplejets2.end(); ++jet_iter){
595    
596     VHbbEvent::SimpleJet sj;
597 tboccali 1.44 // std::cout <<" sj2"<<std::endl;
598 tboccali 1.28 fillSimpleJet(sj,jet_iter);
599 tboccali 1.31 // if(!runOnMC_)
600     setJecUnc(sj,jecUnc);
601 tboccali 1.28 /* sj.flavour = jet_iter->partonFlavour();
602 tboccali 1.1
603    
604     sj.tche=jet_iter->bDiscriminator("trackCountingHighEffBJetTags");
605     sj.tchp=jet_iter->bDiscriminator("trackCountingHighPurBJetTags");
606     sj.jp=jet_iter->bDiscriminator("jetProbabilityBJetTags");
607     sj.jpb=jet_iter->bDiscriminator("jetBProbabilityBJetTags");
608     sj.ssvhe=jet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
609     sj.csv=jet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
610     sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
611     sj.charge=jet_iter->jetCharge();
612     sj.ntracks=jet_iter->associatedTracks().size();
613 tboccali 1.13 sj.p4=GENPTOLORP(jet_iter);
614 tboccali 1.6 sj.chargedTracksFourMomentum=(getChargedTracksMomentum(&*(jet_iter)));
615 bortigno 1.24 sj.SF_CSVL=1;
616     sj.SF_CSVM=1;
617     sj.SF_CSVT=1;
618     sj.SF_CSVLerr=0;
619     sj.SF_CSVMerr=0;
620     sj.SF_CSVTerr=0;
621 tboccali 1.28
622     //
623     // addtaginfo for csv
624     //
625    
626     if (jet_iter->hasTagInfo("SimpleSecondaryVertex")) {
627    
628     const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
629     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
630     sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
631     Measurement1D m = tf->flightDistance(0);
632     sj.vtx3dL = m.value();
633     sj.vtx3deL = m.error();
634     }
635    
636    
637 bortigno 1.24 //
638     // add tVector
639     //
640 tboccali 1.5 sj.tVector = getTvect(&(*jet_iter));
641 tboccali 1.28 */
642 tboccali 1.1 Particle::LorentzVector p4Jet = jet_iter->p4();
643    
644 tboccali 1.3 if(runOnMC_){
645 bortigno 1.24
646     //BTV scale factors
647 arizzi 1.27 fillScaleFactors(sj, btagSFs);
648 bortigno 1.24
649     //PAT genJet matching
650     //genJet
651     const reco::GenJet *gJ = jet_iter->genJet();
652     //physical parton for mother info ONLY
653 bortigno 1.43 if( (jet_iter->genParton()) ){
654     sj.bestMCid = jet_iter->genParton()->pdgId();
655     if( (jet_iter->genParton()->mother()) )
656     sj.bestMCmomid=jet_iter->genParton()->mother()->pdgId();
657     }
658 bortigno 1.24 TLorentzVector gJp4;
659     if(gJ){
660     gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
661 bortigno 1.43 sj.bestMCp4 = gJp4;
662 bortigno 1.24 if(verbose_){
663     std::clog << "genJet matched Pt = " << gJp4.Pt() << std::endl;
664     std::clog << "genJet matched eta = " << gJp4.Eta() << std::endl;
665     std::clog << "genJet matched deltaR = " << gJp4.DeltaR(sj.p4) << std::endl;
666     std::clog << "genJet matched mother id = " << sj.bestMCmomid << std::endl;
667 tboccali 1.1 }
668     }
669 bortigno 1.24
670 degrutto 1.58 // add flag if a mc lepton is find inside a cone around the jets...
671     iEvent.getByLabel("genParticles", genParticles);
672    
673     for(size_t i = 0; i < genParticles->size(); ++ i) {
674    
675     const GenParticle & p = (*genParticles)[i];
676     int id = 0;
677     p.pt()> lep_ptCutForBjets_ ? id= p.pdgId(): 0;
678    
679     // std::cout<< "found a muon with pt " << mu->pt() << std::endl;
680 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;
681 degrutto 1.58 }
682    
683     } //isMC
684 degrutto 1.61
685 degrutto 1.58 // add flag if a reco lepton is find inside a cone around the jets...
686     edm::Handle<edm::View<reco::Candidate> > muonNoCutsHandle;
687     iEvent.getByLabel(muonoCutsLabel_,muonNoCutsHandle);
688 degrutto 1.61 edm::View<reco::Candidate> muonsNoCuts = *muonNoCutsHandle;
689    
690 degrutto 1.58
691    
692     for(edm::View<reco::Candidate>::const_iterator mu = muonsNoCuts.begin(); mu!=muonsNoCuts.end() && sj.isSemiLept!=1; ++mu){
693     // std::cout<< "found a muon with pt " << mu->pt() << std::endl;
694 degrutto 1.61 const pat::Muon& m = static_cast <const pat::Muon&> (*mu);
695     float Smpt = m.pt();
696     float Smeta = m.eta();
697     float Smphi = m.phi();
698    
699     float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
700    
701     if ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5) {
702     sj.isSemiLept=1;
703     //isSemiLept(-99), isSemiLeptMCtruth(-99), SoftLeptPt(-99), SoftLeptdR(-99), SoftLeptptRel(-99), SoftLeptpdgId(-99), SoftLeptIdlooseMu(-99), SoftLeptId95(-99), SoftLeptRelCombIso(-99),
704     sj.SoftLeptpdgId =13;
705     sj.SoftLeptdR= SmJdR;
706     sj.SoftLeptPt=Smpt;
707     TVector3 mvec ( m.p4().Vect().X(), m.p4().Vect().Y(), m.p4().Vect().Z() );
708     sj.SoftLeptptRel= sj.p4.Perp( mvec );
709     sj.SoftLeptRelCombIso = (m.trackIso() + m.ecalIso() + m.hcalIso() ) / Smpt ;
710     sj.SoftLeptIdlooseMu=m.muonID("TMLastStationLoose");
711     }
712 degrutto 1.58 }
713    
714 degrutto 1.61
715     edm::Handle<edm::View<reco::Candidate> > eleNoCutsHandle;
716     iEvent.getByLabel(elenoCutsLabel_,eleNoCutsHandle);
717     edm::View<reco::Candidate> elesNoCuts = *eleNoCutsHandle;
718    
719    
720    
721     for(edm::View<reco::Candidate>::const_iterator ele = elesNoCuts.begin(); ele!=elesNoCuts.end() && sj.isSemiLept!=1; ++ele){
722    
723     const pat::Electron& e = static_cast <const pat::Electron&> (*ele);
724     float Smpt = e.pt();
725     float Smeta = e.eta();
726     float Smphi = e.phi();
727    
728     float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
729     if ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5) {
730     sj.isSemiLept=1;
731     sj.SoftLeptpdgId =11;
732     sj.SoftLeptdR= SmJdR;
733     sj.SoftLeptPt=Smpt;
734     TVector3 mvec ( e.p4().Vect().X(), e.p4().Vect().Y(), e.p4().Vect().Z() );
735     sj.SoftLeptptRel= sj.p4.Perp( mvec );
736     sj.SoftLeptRelCombIso = (e.trackIso() + e.ecalIso() + e.hcalIso() ) / Smpt ;
737     // sj.SoftLeptId95=e.electronID("eidVBTFCom95");
738 degrutto 1.62 //std::cout << "before ele id " << std::endl;
739     // std::cout << " e.e.sigmaIetaIeta " << e.sigmaIetaIeta() << std::endl;
740 degrutto 1.61 //std::cout << " e.isEB() " << e.isEB() << std::endl;
741     if (
742     ( fabs(Smeta)<2.5 && !( abs(Smeta)>1.4442 && abs(Smeta)<1.566)) &&
743    
744     (( abs(Smeta)>1.566 && (e.sigmaIetaIeta()<0.01) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.8 && e.deltaPhiSuperClusterTrackAtVtx()>-0.8) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.007 && e.deltaEtaSuperClusterTrackAtVtx()>-0.007 ) )
745     || ( abs(Smeta)<1.4442 && (e.sigmaIetaIeta()<0.03) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.7 && e.deltaPhiSuperClusterTrackAtVtx()>-0.7 ) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.01 && e.deltaEtaSuperClusterTrackAtVtx()>-0.01 ) ))
746     )
747     sj.SoftLeptId95=1;
748     }
749     }
750    
751    
752 degrutto 1.58
753    
754 tboccali 1.1
755     hbbInfo->simpleJets2.push_back(sj);
756    
757     }
758    
759    
760     /* const GenJet* jet1Mc = bjet1.genJet();
761     const GenJet* jet2Mc = bjet2.genJet();
762     if(jet1Mc!=0){
763     MCbJet1MomId=jet1Mc->mother()->pdgId();
764     MCbJet1GMomId=jet1Mc->mother()->mother()->pdgId();
765     }
766    
767     if(jet2Mc!=0){
768     MCbJet2MomId=jet2Mc->mother()->pdgId();
769     MCbJet2GMomId=jet2Mc->mother()->mother()->pdgId();
770     }
771     */
772    
773    
774    
775     /////// hard jet
776    
777    
778     double matEta[1000*30],matPhi[1000*30];
779     for(int i=0;i<1000;i++){for(int j=0;j<30;j++){matEta[i*j]=-99.;matPhi[i*j]=-99.;}}
780    
781     for(edm::View<pat::Jet>::const_iterator jet_iter = jets.begin(); jet_iter!=jets.end(); ++jet_iter){
782    
783     if(printJet) {std::cout << "Jet Pt: " << jet_iter->pt() << " E,M: " << jet_iter->p4().E() << " " << jet_iter->p4().M() << "\n";}
784    
785     reco::Jet::Constituents constituents = jet_iter->getJetConstituents();
786    
787     // if(printJet) {std::cout << "NsubJets: " << constituents.size() << "\n";}
788     VHbbEvent::HardJet hj;
789     hj.constituents=constituents.size();
790 tboccali 1.13 hj.p4 =GENPTOLORP(jet_iter);
791 tboccali 1.28
792 tboccali 1.1 for (unsigned int iJC(0); iJC<constituents.size(); ++iJC ){
793     Jet::Constituent icandJet = constituents[iJC];
794    
795     if(printJet) {std::cout << "subJet Pt: " << icandJet->pt() << " subJet E,M,eta,phi: " << icandJet->p4().E() << ","
796     << icandJet->p4().M() << "," << icandJet->eta() << "," << icandJet->phi() << "\n"; }
797    
798    
799     hj.subFourMomentum.push_back(GENPTOLORP(icandJet));
800     hj.etaSub.push_back(icandJet->eta());
801     hj.phiSub.push_back(icandJet->phi());
802    
803     }
804     hbbInfo->hardJets.push_back(hj);
805     }
806    
807     // HardJetSubEta2.SetMatrixArray(matEta);
808     // HardJetSubPhi2.SetMatrixArray(matPhi);
809     // TMatrixDRow a1(HardJetSubEta2,0);
810     // for(int i=0;i<30;i++){
811     // std::cout << "test: " << a1[i] << "\n";
812     // }
813    
814     // pat subJets with Btag
815    
816    
817     for(edm::View<pat::Jet>::const_iterator subjet_iter = subjets.begin(); subjet_iter!=subjets.end(); ++subjet_iter){
818    
819     if(printJet) {std::cout << "SubJetTagged Pt: " << subjet_iter->pt() << " E,M,eta,phi,Btag: " << subjet_iter->p4().E()
820     << "," << subjet_iter->p4().M() << "," << subjet_iter->eta() << "," << subjet_iter->phi()
821     << "," << subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
822    
823     VHbbEvent::SimpleJet sj;
824 tboccali 1.44 // std::cout <<" sub jet "<<std::endl;
825 tboccali 1.28 fillSimpleJet(sj,subjet_iter);
826 tboccali 1.31 // if(!runOnMC_)
827     setJecUnc(sj,jecUnc);
828 tboccali 1.28 /* sj.flavour = subjet_iter->partonFlavour();
829 tboccali 1.5 sj.tVector = getTvect(&(*subjet_iter));
830 tboccali 1.1 sj.tche=subjet_iter->bDiscriminator("trackCountingHighEffBJetTags");
831     sj.tchp=subjet_iter->bDiscriminator("trackCountingHighPurBJetTags");
832     sj.jp=subjet_iter->bDiscriminator("jetProbabilityBJetTags");
833     sj.jpb=subjet_iter->bDiscriminator("jetBProbabilityBJetTags");
834     sj.ssvhe=subjet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
835     sj.csv=subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
836     sj.csvmva=subjet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
837     sj.charge=subjet_iter->jetCharge();
838     sj.ntracks=subjet_iter->associatedTracks().size();
839 tboccali 1.13 sj.p4=GENPTOLORP(subjet_iter);
840     sj.p4=(getChargedTracksMomentum(&*(subjet_iter)));
841 tboccali 1.28
842     //
843     // addtaginfo for csv
844     //
845    
846     if (subjet_iter->hasTagInfo("SimpleSecondaryVertex")) {
847    
848     const reco::SecondaryVertexTagInfo * tf = subjet_iter->tagInfoSecondaryVertex();
849     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
850     sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
851     Measurement1D m = tf->flightDistance(0);
852     sj.vtx3dL = m.value();
853     sj.vtx3deL = m.error();
854     }
855     */
856 tboccali 1.1 hbbInfo->subJets.push_back(sj);
857    
858     }
859    
860 dlopes 1.59 for(edm::View<pat::Jet>::const_iterator filterjet_iter = filterjets.begin(); filterjet_iter!=filterjets.end(); ++filterjet_iter){
861    
862     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";}
863    
864     VHbbEvent::SimpleJet fj;
865     // std::cout <<" sub jet "<<std::endl;
866     fillSimpleJet(fj,filterjet_iter);
867     // if(!runOnMC_)
868     setJecUnc(fj,jecUnc);
869    
870     hbbInfo->filterJets.push_back(fj);
871    
872    
873     }
874    
875 tboccali 1.54 //
876     // add charged met
877     //
878    
879     edm::Handle<edm::View<reco::MET> > metChargedHandle;
880     iEvent.getByLabel("pfMETNoPUCharge",metChargedHandle);
881     edm::View<reco::MET> metsCh = *metChargedHandle;
882     if(metsCh.size()){
883     hbbInfo->metCh.sumEt=(metsCh[0]).sumEt();
884 arizzi 1.56 hbbInfo->metCh.metSig=metSignificance(& (metsCh[0]));
885 tboccali 1.54 hbbInfo->metCh.eLong=(metsCh[0]).e_longitudinal();
886     hbbInfo->metCh.p4=GENPTOLOR((metsCh[0]));
887     if (verbose_) std::cout <<" METCharged "<< hbbInfo->metCh.metSig <<" " << hbbInfo->metCh.sumEt<<std::endl;
888     }
889 tboccali 1.1
890 degrutto 1.62 // type 1 corr met
891     edm::Handle<edm::View<reco::MET> > pfmetType1corrHandle;
892     iEvent.getByLabel("patType1CorrectedPFMet",pfmetType1corrHandle);
893     edm::View<reco::MET> pfmetsType1corr = *pfmetType1corrHandle;
894     if(pfmetsType1corr.size()){
895     hbbInfo->pfmetType1corr.sumEt=(pfmetsType1corr[0]).sumEt();
896     hbbInfo->pfmetType1corr.metSig=metSignificance(& (pfmetsType1corr[0]));
897     hbbInfo->pfmetType1corr.eLong=(pfmetsType1corr[0]).e_longitudinal();
898     hbbInfo->pfmetType1corr.p4=GENPTOLOR((pfmetsType1corr[0]));
899     if (verbose_) std::cout <<" type 1 corrected pfMET "<< hbbInfo->pfmetType1corr.metSig <<" " << hbbInfo->pfmetType1corr.sumEt<<std::endl;
900     }
901    
902    
903     // type 1 + 2 corr met
904     edm::Handle<edm::View<reco::MET> > pfmetType1p2corrHandle;
905     iEvent.getByLabel("patType1p2CorrectedPFMet",pfmetType1p2corrHandle);
906     edm::View<reco::MET> pfmetsType1p2corr = *pfmetType1p2corrHandle;
907     if(pfmetsType1p2corr.size()){
908     hbbInfo->pfmetType1p2corr.sumEt=(pfmetsType1p2corr[0]).sumEt();
909     hbbInfo->pfmetType1p2corr.metSig=metSignificance(& (pfmetsType1p2corr[0]));
910     hbbInfo->pfmetType1p2corr.eLong=(pfmetsType1p2corr[0]).e_longitudinal();
911     hbbInfo->pfmetType1p2corr.p4=GENPTOLOR((pfmetsType1p2corr[0]));
912     if (verbose_) std::cout <<" type 1 +2 corrected pfMET "<< hbbInfo->pfmetType1p2corr.metSig <<" " << hbbInfo->pfmetType1p2corr.sumEt<<std::endl;
913     }
914    
915     // type 1 corr met NoPU
916     edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
917     iEvent.getByLabel("patType1CorrectedPFMetNoPU",pfmetNoPUType1corrHandle);
918     edm::View<reco::MET> pfmetsNoPUType1corr = *pfmetNoPUType1corrHandle;
919     if(pfmetsNoPUType1corr.size()){
920     hbbInfo->pfmetNoPUType1corr.sumEt=(pfmetsNoPUType1corr[0]).sumEt();
921     hbbInfo->pfmetNoPUType1corr.metSig=metSignificance(& (pfmetsNoPUType1corr[0]));
922     hbbInfo->pfmetNoPUType1corr.eLong=(pfmetsNoPUType1corr[0]).e_longitudinal();
923     hbbInfo->pfmetNoPUType1corr.p4=GENPTOLOR((pfmetsNoPUType1corr[0]));
924     if (verbose_) std::cout <<" type 1 corrected pfMET NoPU"<< hbbInfo->pfmetNoPUType1corr.metSig <<" " << hbbInfo->pfmetNoPUType1corr.sumEt<<std::endl;
925     }
926    
927    
928     // type 1 + 2 corr met
929     edm::Handle<edm::View<reco::MET> > pfmetNoPUType1p2corrHandle;
930     iEvent.getByLabel("patType1p2CorrectedPFMetNoPU",pfmetNoPUType1p2corrHandle);
931     edm::View<reco::MET> pfmetsNoPUType1p2corr = *pfmetNoPUType1p2corrHandle;
932     if(pfmetsNoPUType1p2corr.size()){
933     hbbInfo->pfmetNoPUType1p2corr.sumEt=(pfmetsNoPUType1p2corr[0]).sumEt();
934     hbbInfo->pfmetNoPUType1p2corr.metSig=metSignificance(& (pfmetsNoPUType1p2corr[0]));
935     hbbInfo->pfmetNoPUType1p2corr.eLong=(pfmetsNoPUType1p2corr[0]).e_longitudinal();
936     hbbInfo->pfmetNoPUType1p2corr.p4=GENPTOLOR((pfmetsNoPUType1p2corr[0]));
937     if (verbose_) std::cout <<" type 1 +2 corrected pfMET "<< hbbInfo->pfmetNoPUType1p2corr.metSig <<" " << hbbInfo->pfmetNoPUType1p2corr.sumEt<<std::endl;
938     }
939    
940    
941     /*
942     // MET uncertainty vector
943     vector<pat::MET> "patType1CorrectedPFMet" "" "VH"
944     vector<pat::MET> "patType1CorrectedPFMetElectronEnDown" "" "VH"
945     vector<pat::MET> "patType1CorrectedPFMetElectronEnUp" "" "VH"
946     vector<pat::MET> "patType1CorrectedPFMetJetEnDown" "" "VH"
947     vector<pat::MET> "patType1CorrectedPFMetJetEnUp" "" "VH"
948     vector<pat::MET> "patType1CorrectedPFMetJetResDown" "" "VH"
949     vector<pat::MET> "patType1CorrectedPFMetJetResUp" "" "VH"
950     vector<pat::MET> "patType1CorrectedPFMetMuonEnDown" "" "VH"
951     vector<pat::MET> "patType1CorrectedPFMetMuonEnUp" "" "VH"
952     vector<pat::MET> "patType1CorrectedPFMetNoPU" "" "VH"
953     vector<pat::MET> "patType1CorrectedPFMetTauEnDown" "" "VH"
954     vector<pat::MET> "patType1CorrectedPFMetTauEnUp" "" "VH"
955     vector<pat::MET> "patType1CorrectedPFMetUnclusteredEnDown" "" "VH"
956     vector<pat::MET> "patType1CorrectedPFMetUnclusteredEnUp" "" "VH"
957     vector<pat::MET> "patType1p2CorrectedPFMet" "" "VH"
958     vector<pat::MET> "patType1p2CorrectedPFMetElectronEnDown" "" "VH"
959     vector<pat::MET> "patType1p2CorrectedPFMetElectronEnUp" "" "VH"
960     vector<pat::MET> "patType1p2CorrectedPFMetJetEnDown" "" "VH"
961     vector<pat::MET> "patType1p2CorrectedPFMetJetEnUp" "" "VH"
962     vector<pat::MET> "patType1p2CorrectedPFMetJetResDown" "" "VH"
963     vector<pat::MET> "patType1p2CorrectedPFMetJetResUp" "" "VH"
964     vector<pat::MET> "patType1p2CorrectedPFMetMuonEnDown" "" "VH"
965     vector<pat::MET> "patType1p2CorrectedPFMetMuonEnUp" "" "VH"
966     vector<pat::MET> "patType1p2CorrectedPFMetNoPU" "" "VH"
967     vector<pat::MET> "patType1p2CorrectedPFMetTauEnDown" "" "VH"
968     vector<pat::MET> "patType1p2CorrectedPFMetTauEnUp" "" "VH"
969     vector<pat::MET> "patType1p2CorrectedPFMetUnclusteredEnDown" "" "VH"
970     vector<pat::MET> "patType1p2CorrectedPFMetUnclusteredEnUp" "" "VH"
971     */
972    
973     VHbbEvent::METInfo metunc;
974     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetElectronEnDownHandle;
975     iEvent.getByLabel("patType1CorrectedPFMetElectronEnDown",patType1CorrectedPFMetElectronEnDownHandle);
976     edm::View<reco::MET> patType1CorrectedPFMetsElectronEnDown = *patType1CorrectedPFMetElectronEnDownHandle;
977     if(patType1CorrectedPFMetsElectronEnDown.size()){
978     metunc.sumEt =(patType1CorrectedPFMetsElectronEnDown[0]).sumEt();
979     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsElectronEnDown[0]));
980     metunc.eLong=(patType1CorrectedPFMetsElectronEnDown[0]).e_longitudinal();
981     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsElectronEnDown[0]));
982     hbbInfo->metUncInfo.push_back(metunc);
983     }
984    
985     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetElectronEnUpHandle;
986     iEvent.getByLabel("patType1CorrectedPFMetElectronEnUp",patType1CorrectedPFMetElectronEnUpHandle);
987     edm::View<reco::MET> patType1CorrectedPFMetsElectronEnUp = *patType1CorrectedPFMetElectronEnUpHandle;
988     if(patType1CorrectedPFMetsElectronEnUp.size()){
989     metunc.sumEt =(patType1CorrectedPFMetsElectronEnUp[0]).sumEt();
990     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsElectronEnUp[0]));
991     metunc.eLong=(patType1CorrectedPFMetsElectronEnUp[0]).e_longitudinal();
992     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsElectronEnUp[0]));
993     hbbInfo->metUncInfo.push_back(metunc);
994     }
995    
996    
997    
998     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetMuonEnDownHandle;
999     iEvent.getByLabel("patType1CorrectedPFMetMuonEnDown",patType1CorrectedPFMetMuonEnDownHandle);
1000     edm::View<reco::MET> patType1CorrectedPFMetsMuonEnDown = *patType1CorrectedPFMetMuonEnDownHandle;
1001     if(patType1CorrectedPFMetsMuonEnDown.size()){
1002     metunc.sumEt =(patType1CorrectedPFMetsMuonEnDown[0]).sumEt();
1003     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsMuonEnDown[0]));
1004     metunc.eLong=(patType1CorrectedPFMetsMuonEnDown[0]).e_longitudinal();
1005     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsMuonEnDown[0]));
1006     hbbInfo->metUncInfo.push_back(metunc);
1007     }
1008    
1009     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetMuonEnUpHandle;
1010     iEvent.getByLabel("patType1CorrectedPFMetMuonEnUp",patType1CorrectedPFMetMuonEnUpHandle);
1011     edm::View<reco::MET> patType1CorrectedPFMetsMuonEnUp = *patType1CorrectedPFMetMuonEnUpHandle;
1012     if(patType1CorrectedPFMetsMuonEnUp.size()){
1013     metunc.sumEt =(patType1CorrectedPFMetsMuonEnUp[0]).sumEt();
1014     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsMuonEnUp[0]));
1015     metunc.eLong=(patType1CorrectedPFMetsMuonEnUp[0]).e_longitudinal();
1016     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsMuonEnUp[0]));
1017     hbbInfo->metUncInfo.push_back(metunc);
1018     }
1019    
1020    
1021    
1022     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetTauEnDownHandle;
1023     iEvent.getByLabel("patType1CorrectedPFMetTauEnDown",patType1CorrectedPFMetTauEnDownHandle);
1024     edm::View<reco::MET> patType1CorrectedPFMetsTauEnDown = *patType1CorrectedPFMetTauEnDownHandle;
1025     if(patType1CorrectedPFMetsTauEnDown.size()){
1026     metunc.sumEt =(patType1CorrectedPFMetsTauEnDown[0]).sumEt();
1027     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsTauEnDown[0]));
1028     metunc.eLong=(patType1CorrectedPFMetsTauEnDown[0]).e_longitudinal();
1029     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsTauEnDown[0]));
1030     hbbInfo->metUncInfo.push_back(metunc);
1031     }
1032    
1033     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetTauEnUpHandle;
1034     iEvent.getByLabel("patType1CorrectedPFMetTauEnUp",patType1CorrectedPFMetTauEnUpHandle);
1035     edm::View<reco::MET> patType1CorrectedPFMetsTauEnUp = *patType1CorrectedPFMetTauEnUpHandle;
1036     if(patType1CorrectedPFMetsTauEnUp.size()){
1037     metunc.sumEt =(patType1CorrectedPFMetsTauEnUp[0]).sumEt();
1038     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsTauEnUp[0]));
1039     metunc.eLong=(patType1CorrectedPFMetsTauEnUp[0]).e_longitudinal();
1040     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsTauEnUp[0]));
1041     hbbInfo->metUncInfo.push_back(metunc);
1042     }
1043    
1044    
1045     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetEnDownHandle;
1046     iEvent.getByLabel("patType1CorrectedPFMetJetEnDown",patType1CorrectedPFMetJetEnDownHandle);
1047     edm::View<reco::MET> patType1CorrectedPFMetsJetEnDown = *patType1CorrectedPFMetJetEnDownHandle;
1048     if(patType1CorrectedPFMetsJetEnDown.size()){
1049     metunc.sumEt =(patType1CorrectedPFMetsJetEnDown[0]).sumEt();
1050     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetEnDown[0]));
1051     metunc.eLong=(patType1CorrectedPFMetsJetEnDown[0]).e_longitudinal();
1052     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetEnDown[0]));
1053     hbbInfo->metUncInfo.push_back(metunc);
1054     }
1055    
1056     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetEnUpHandle;
1057     iEvent.getByLabel("patType1CorrectedPFMetJetEnUp",patType1CorrectedPFMetJetEnUpHandle);
1058     edm::View<reco::MET> patType1CorrectedPFMetsJetEnUp = *patType1CorrectedPFMetJetEnUpHandle;
1059     if(patType1CorrectedPFMetsJetEnUp.size()){
1060     metunc.sumEt =(patType1CorrectedPFMetsJetEnUp[0]).sumEt();
1061     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetEnUp[0]));
1062     metunc.eLong=(patType1CorrectedPFMetsJetEnUp[0]).e_longitudinal();
1063     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetEnUp[0]));
1064     hbbInfo->metUncInfo.push_back(metunc);
1065     }
1066    
1067    
1068     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetResDownHandle;
1069     iEvent.getByLabel("patType1CorrectedPFMetJetResDown",patType1CorrectedPFMetJetResDownHandle);
1070     edm::View<reco::MET> patType1CorrectedPFMetsJetResDown = *patType1CorrectedPFMetJetResDownHandle;
1071     if(patType1CorrectedPFMetsJetResDown.size()){
1072     metunc.sumEt =(patType1CorrectedPFMetsJetResDown[0]).sumEt();
1073     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetResDown[0]));
1074     metunc.eLong=(patType1CorrectedPFMetsJetResDown[0]).e_longitudinal();
1075     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetResDown[0]));
1076     hbbInfo->metUncInfo.push_back(metunc);
1077     }
1078    
1079     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetJetResUpHandle;
1080     iEvent.getByLabel("patType1CorrectedPFMetJetResUp",patType1CorrectedPFMetJetResUpHandle);
1081     edm::View<reco::MET> patType1CorrectedPFMetsJetResUp = *patType1CorrectedPFMetJetResUpHandle;
1082     if(patType1CorrectedPFMetsJetResUp.size()){
1083     metunc.sumEt =(patType1CorrectedPFMetsJetResUp[0]).sumEt();
1084     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsJetResUp[0]));
1085     metunc.eLong=(patType1CorrectedPFMetsJetResUp[0]).e_longitudinal();
1086     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsJetResUp[0]));
1087     hbbInfo->metUncInfo.push_back(metunc);
1088     }
1089    
1090    
1091     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetUnclusteredEnDownHandle;
1092     iEvent.getByLabel("patType1CorrectedPFMetUnclusteredEnDown",patType1CorrectedPFMetUnclusteredEnDownHandle);
1093     edm::View<reco::MET> patType1CorrectedPFMetsUnclusteredEnDown = *patType1CorrectedPFMetUnclusteredEnDownHandle;
1094     if(patType1CorrectedPFMetsUnclusteredEnDown.size()){
1095     metunc.sumEt =(patType1CorrectedPFMetsUnclusteredEnDown[0]).sumEt();
1096     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsUnclusteredEnDown[0]));
1097     metunc.eLong=(patType1CorrectedPFMetsUnclusteredEnDown[0]).e_longitudinal();
1098     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsUnclusteredEnDown[0]));
1099     hbbInfo->metUncInfo.push_back(metunc);
1100     }
1101    
1102     edm::Handle<edm::View<reco::MET> > patType1CorrectedPFMetUnclusteredEnUpHandle;
1103     iEvent.getByLabel("patType1CorrectedPFMetUnclusteredEnUp",patType1CorrectedPFMetUnclusteredEnUpHandle);
1104     edm::View<reco::MET> patType1CorrectedPFMetsUnclusteredEnUp = *patType1CorrectedPFMetUnclusteredEnUpHandle;
1105     if(patType1CorrectedPFMetsUnclusteredEnUp.size()){
1106     metunc.sumEt =(patType1CorrectedPFMetsUnclusteredEnUp[0]).sumEt();
1107     metunc.metSig=metSignificance(& (patType1CorrectedPFMetsUnclusteredEnUp[0]));
1108     metunc.eLong=(patType1CorrectedPFMetsUnclusteredEnUp[0]).e_longitudinal();
1109     metunc.p4=GENPTOLOR((patType1CorrectedPFMetsUnclusteredEnUp[0]));
1110     hbbInfo->metUncInfo.push_back(metunc);
1111     }
1112    
1113    
1114     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetElectronEnDownHandle;
1115     iEvent.getByLabel("patType1p2CorrectedPFMetElectronEnDown",patType1p2CorrectedPFMetElectronEnDownHandle);
1116     edm::View<reco::MET> patType1p2CorrectedPFMetsElectronEnDown = *patType1p2CorrectedPFMetElectronEnDownHandle;
1117     if(patType1p2CorrectedPFMetsElectronEnDown.size()){
1118     metunc.sumEt =(patType1p2CorrectedPFMetsElectronEnDown[0]).sumEt();
1119     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsElectronEnDown[0]));
1120     metunc.eLong=(patType1p2CorrectedPFMetsElectronEnDown[0]).e_longitudinal();
1121     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsElectronEnDown[0]));
1122     hbbInfo->metUncInfo.push_back(metunc);
1123     }
1124    
1125     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetElectronEnUpHandle;
1126     iEvent.getByLabel("patType1p2CorrectedPFMetElectronEnUp",patType1p2CorrectedPFMetElectronEnUpHandle);
1127     edm::View<reco::MET> patType1p2CorrectedPFMetsElectronEnUp = *patType1p2CorrectedPFMetElectronEnUpHandle;
1128     if(patType1p2CorrectedPFMetsElectronEnUp.size()){
1129     metunc.sumEt =(patType1p2CorrectedPFMetsElectronEnUp[0]).sumEt();
1130     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsElectronEnUp[0]));
1131     metunc.eLong=(patType1p2CorrectedPFMetsElectronEnUp[0]).e_longitudinal();
1132     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsElectronEnUp[0]));
1133     hbbInfo->metUncInfo.push_back(metunc);
1134     }
1135    
1136    
1137    
1138     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetMuonEnDownHandle;
1139     iEvent.getByLabel("patType1p2CorrectedPFMetMuonEnDown",patType1p2CorrectedPFMetMuonEnDownHandle);
1140     edm::View<reco::MET> patType1p2CorrectedPFMetsMuonEnDown = *patType1p2CorrectedPFMetMuonEnDownHandle;
1141     if(patType1p2CorrectedPFMetsMuonEnDown.size()){
1142     metunc.sumEt =(patType1p2CorrectedPFMetsMuonEnDown[0]).sumEt();
1143     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsMuonEnDown[0]));
1144     metunc.eLong=(patType1p2CorrectedPFMetsMuonEnDown[0]).e_longitudinal();
1145     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsMuonEnDown[0]));
1146     hbbInfo->metUncInfo.push_back(metunc);
1147     }
1148    
1149     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetMuonEnUpHandle;
1150     iEvent.getByLabel("patType1p2CorrectedPFMetMuonEnUp",patType1p2CorrectedPFMetMuonEnUpHandle);
1151     edm::View<reco::MET> patType1p2CorrectedPFMetsMuonEnUp = *patType1p2CorrectedPFMetMuonEnUpHandle;
1152     if(patType1p2CorrectedPFMetsMuonEnUp.size()){
1153     metunc.sumEt =(patType1p2CorrectedPFMetsMuonEnUp[0]).sumEt();
1154     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsMuonEnUp[0]));
1155     metunc.eLong=(patType1p2CorrectedPFMetsMuonEnUp[0]).e_longitudinal();
1156     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsMuonEnUp[0]));
1157     hbbInfo->metUncInfo.push_back(metunc);
1158     }
1159    
1160    
1161    
1162     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetTauEnDownHandle;
1163     iEvent.getByLabel("patType1p2CorrectedPFMetTauEnDown",patType1p2CorrectedPFMetTauEnDownHandle);
1164     edm::View<reco::MET> patType1p2CorrectedPFMetsTauEnDown = *patType1p2CorrectedPFMetTauEnDownHandle;
1165     if(patType1p2CorrectedPFMetsTauEnDown.size()){
1166     metunc.sumEt =(patType1p2CorrectedPFMetsTauEnDown[0]).sumEt();
1167     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsTauEnDown[0]));
1168     metunc.eLong=(patType1p2CorrectedPFMetsTauEnDown[0]).e_longitudinal();
1169     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsTauEnDown[0]));
1170     hbbInfo->metUncInfo.push_back(metunc);
1171     }
1172    
1173     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetTauEnUpHandle;
1174     iEvent.getByLabel("patType1p2CorrectedPFMetTauEnUp",patType1p2CorrectedPFMetTauEnUpHandle);
1175     edm::View<reco::MET> patType1p2CorrectedPFMetsTauEnUp = *patType1p2CorrectedPFMetTauEnUpHandle;
1176     if(patType1p2CorrectedPFMetsTauEnUp.size()){
1177     metunc.sumEt =(patType1p2CorrectedPFMetsTauEnUp[0]).sumEt();
1178     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsTauEnUp[0]));
1179     metunc.eLong=(patType1p2CorrectedPFMetsTauEnUp[0]).e_longitudinal();
1180     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsTauEnUp[0]));
1181     hbbInfo->metUncInfo.push_back(metunc);
1182     }
1183    
1184    
1185     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetEnDownHandle;
1186     iEvent.getByLabel("patType1p2CorrectedPFMetJetEnDown",patType1p2CorrectedPFMetJetEnDownHandle);
1187     edm::View<reco::MET> patType1p2CorrectedPFMetsJetEnDown = *patType1p2CorrectedPFMetJetEnDownHandle;
1188     if(patType1p2CorrectedPFMetsJetEnDown.size()){
1189     metunc.sumEt =(patType1p2CorrectedPFMetsJetEnDown[0]).sumEt();
1190     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetEnDown[0]));
1191     metunc.eLong=(patType1p2CorrectedPFMetsJetEnDown[0]).e_longitudinal();
1192     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetEnDown[0]));
1193     hbbInfo->metUncInfo.push_back(metunc);
1194     }
1195    
1196     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetEnUpHandle;
1197     iEvent.getByLabel("patType1p2CorrectedPFMetJetEnUp",patType1p2CorrectedPFMetJetEnUpHandle);
1198     edm::View<reco::MET> patType1p2CorrectedPFMetsJetEnUp = *patType1p2CorrectedPFMetJetEnUpHandle;
1199     if(patType1p2CorrectedPFMetsJetEnUp.size()){
1200     metunc.sumEt =(patType1p2CorrectedPFMetsJetEnUp[0]).sumEt();
1201     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetEnUp[0]));
1202     metunc.eLong=(patType1p2CorrectedPFMetsJetEnUp[0]).e_longitudinal();
1203     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetEnUp[0]));
1204     hbbInfo->metUncInfo.push_back(metunc);
1205     }
1206    
1207    
1208     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetResDownHandle;
1209     iEvent.getByLabel("patType1p2CorrectedPFMetJetResDown",patType1p2CorrectedPFMetJetResDownHandle);
1210     edm::View<reco::MET> patType1p2CorrectedPFMetsJetResDown = *patType1p2CorrectedPFMetJetResDownHandle;
1211     if(patType1p2CorrectedPFMetsJetResDown.size()){
1212     metunc.sumEt =(patType1p2CorrectedPFMetsJetResDown[0]).sumEt();
1213     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetResDown[0]));
1214     metunc.eLong=(patType1p2CorrectedPFMetsJetResDown[0]).e_longitudinal();
1215     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetResDown[0]));
1216     hbbInfo->metUncInfo.push_back(metunc);
1217     }
1218    
1219     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetJetResUpHandle;
1220     iEvent.getByLabel("patType1p2CorrectedPFMetJetResUp",patType1p2CorrectedPFMetJetResUpHandle);
1221     edm::View<reco::MET> patType1p2CorrectedPFMetsJetResUp = *patType1p2CorrectedPFMetJetResUpHandle;
1222     if(patType1p2CorrectedPFMetsJetResUp.size()){
1223     metunc.sumEt =(patType1p2CorrectedPFMetsJetResUp[0]).sumEt();
1224     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsJetResUp[0]));
1225     metunc.eLong=(patType1p2CorrectedPFMetsJetResUp[0]).e_longitudinal();
1226     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsJetResUp[0]));
1227     hbbInfo->metUncInfo.push_back(metunc);
1228     }
1229    
1230    
1231     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetUnclusteredEnDownHandle;
1232     iEvent.getByLabel("patType1p2CorrectedPFMetUnclusteredEnDown",patType1p2CorrectedPFMetUnclusteredEnDownHandle);
1233     edm::View<reco::MET> patType1p2CorrectedPFMetsUnclusteredEnDown = *patType1p2CorrectedPFMetUnclusteredEnDownHandle;
1234     if(patType1p2CorrectedPFMetsUnclusteredEnDown.size()){
1235     metunc.sumEt =(patType1p2CorrectedPFMetsUnclusteredEnDown[0]).sumEt();
1236     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsUnclusteredEnDown[0]));
1237     metunc.eLong=(patType1p2CorrectedPFMetsUnclusteredEnDown[0]).e_longitudinal();
1238     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsUnclusteredEnDown[0]));
1239     hbbInfo->metUncInfo.push_back(metunc);
1240     }
1241    
1242     edm::Handle<edm::View<reco::MET> > patType1p2CorrectedPFMetUnclusteredEnUpHandle;
1243     iEvent.getByLabel("patType1p2CorrectedPFMetUnclusteredEnUp",patType1p2CorrectedPFMetUnclusteredEnUpHandle);
1244     edm::View<reco::MET> patType1p2CorrectedPFMetsUnclusteredEnUp = *patType1p2CorrectedPFMetUnclusteredEnUpHandle;
1245     if(patType1p2CorrectedPFMetsUnclusteredEnUp.size()){
1246     metunc.sumEt =(patType1p2CorrectedPFMetsUnclusteredEnUp[0]).sumEt();
1247     metunc.metSig=metSignificance(& (patType1p2CorrectedPFMetsUnclusteredEnUp[0]));
1248     metunc.eLong=(patType1p2CorrectedPFMetsUnclusteredEnUp[0]).e_longitudinal();
1249     metunc.p4=GENPTOLOR((patType1p2CorrectedPFMetsUnclusteredEnUp[0]));
1250     hbbInfo->metUncInfo.push_back(metunc);
1251     }
1252    
1253    
1254    
1255 tboccali 1.1 //
1256     // met is calomet
1257     //
1258    
1259     edm::Handle<edm::View<pat::MET> > metTCHandle;
1260     iEvent.getByLabel("patMETsTC",metTCHandle);
1261     edm::View<pat::MET> metsTC = *metTCHandle;
1262 tboccali 1.9 if(metsTC.size()){
1263     hbbInfo->tcmet.sumEt=(metsTC[0]).sumEt();
1264 arizzi 1.56 hbbInfo->tcmet.metSig=metSignificance(&(metsTC[0]));
1265 tboccali 1.9 hbbInfo->tcmet.eLong=(metsTC[0]).e_longitudinal();
1266 tboccali 1.13 hbbInfo->tcmet.p4=GENPTOLOR((metsTC[0]));
1267 tboccali 1.9 if (verbose_) std::cout <<" METTC "<< hbbInfo->tcmet.metSig <<" " << hbbInfo->tcmet.sumEt<<std::endl;
1268     }
1269    
1270 arizzi 1.38 edm::Handle<edm::View<reco::MET> > pfMETNoPUHandle;
1271     iEvent.getByLabel("pfMETNoPU",pfMETNoPUHandle);
1272     edm::View<reco::MET> metspfMETNoPU = *pfMETNoPUHandle;
1273     if(metspfMETNoPU.size()){
1274     hbbInfo->metNoPU.sumEt=(metspfMETNoPU[0]).sumEt();
1275 arizzi 1.56 hbbInfo->metNoPU.metSig=metSignificance(&(metspfMETNoPU[0]));
1276 arizzi 1.38 hbbInfo->metNoPU.eLong=(metspfMETNoPU[0]).e_longitudinal();
1277     hbbInfo->metNoPU.p4=GENPTOLOR((metspfMETNoPU[0]));
1278     if (verbose_) std::cout <<" pfMETNoPU "<< hbbInfo->metNoPU.metSig <<" " << hbbInfo->metNoPU.sumEt<<std::endl;
1279     }
1280 tboccali 1.28
1281 tboccali 1.29 edm::Handle<edm::View<reco::MET> > mHTHandle;
1282 tboccali 1.28 iEvent.getByLabel("patMETsHT",mHTHandle);
1283 tboccali 1.29 edm::View<reco::MET> metsHT = *mHTHandle;
1284 tboccali 1.28 if(metsHT.size()){
1285     hbbInfo->mht.sumEt=(metsHT[0]).sumEt();
1286 arizzi 1.56 hbbInfo->mht.metSig=metSignificance(&(metsHT[0]));
1287 tboccali 1.28 hbbInfo->mht.eLong=(metsHT[0]).e_longitudinal();
1288     hbbInfo->mht.p4=GENPTOLOR((metsHT[0]));
1289     if (verbose_) std::cout <<" METHT "<< hbbInfo->mht.metSig <<" " << hbbInfo->mht.sumEt<<std::endl;
1290     }
1291    
1292 arizzi 1.39 edm::Handle<edm::View<reco::MET> > metHandle;
1293 tboccali 1.28 iEvent.getByLabel(metLabel_,metHandle);
1294 arizzi 1.39 edm::View<reco::MET> mets = *metHandle;
1295 tboccali 1.28
1296 tboccali 1.9 if(mets.size()){
1297     hbbInfo->calomet.sumEt=(mets[0]).sumEt();
1298 arizzi 1.56 hbbInfo->calomet.metSig=metSignificance(&(mets[0]));
1299 tboccali 1.9 hbbInfo->calomet.eLong=(mets[0]).e_longitudinal();
1300 tboccali 1.13 hbbInfo->calomet.p4=GENPTOLOR((mets[0]));
1301 tboccali 1.28 if (verbose_) std::cout <<" METCALO "<< hbbInfo->calomet.metSig <<" " << hbbInfo->calomet.sumEt<<std::endl;
1302 tboccali 1.1 }
1303 tboccali 1.9
1304 tboccali 1.1 edm::Handle<edm::View<pat::MET> > metPFHandle;
1305     iEvent.getByLabel("patMETsPF",metPFHandle);
1306     edm::View<pat::MET> metsPF = *metPFHandle;
1307 tboccali 1.28
1308 tboccali 1.9 if(metsPF.size()){
1309     hbbInfo->pfmet.sumEt=(metsPF[0]).sumEt();
1310 arizzi 1.56 hbbInfo->pfmet.metSig=metSignificance(&(metsPF[0]));
1311 tboccali 1.9 hbbInfo->pfmet.eLong=(metsPF[0]).e_longitudinal();
1312 tboccali 1.13 hbbInfo->pfmet.p4=GENPTOLOR((metsPF[0]));
1313 tboccali 1.28 if (verbose_) std::cout <<" METPF "<< hbbInfo->pfmet.metSig <<" " << hbbInfo->pfmet.sumEt<<std::endl;
1314 tboccali 1.1 }
1315 tboccali 1.28
1316    
1317 tboccali 1.9 if(verbose_){
1318 tboccali 1.28 std::cout << "METs: calomet "<<mets.size()<<" tcmet"<<metsTC.size()<<" pfmet "<<metsPF.size()<<" MHT" <<metsHT.size()<<std::endl;
1319 tboccali 1.9 }
1320    
1321 bortigno 1.25 if(verbose_)
1322     std::cout << " INPUT MUONS "<<muons.size()<<std::endl;
1323 tboccali 1.1
1324     for(edm::View<pat::Muon>::const_iterator mu = muons.begin(); mu!=muons.end(); ++mu){
1325     VHbbEvent::MuonInfo mf;
1326 tboccali 1.13 mf.p4 =GENPTOLORP( mu);
1327 tboccali 1.1 mf.charge=mu->charge();
1328     mf.tIso=mu->trackIso();
1329     mf.eIso=mu->ecalIso();
1330     mf.hIso=mu->hcalIso();
1331 arizzi 1.16 mf.pfChaIso=mu->chargedHadronIso();
1332 degrutto 1.37 mf.pfChaPUIso=mu->userIso(5);
1333 arizzi 1.16 mf.pfPhoIso=mu->photonIso();
1334     mf.pfNeuIso=mu->neutralHadronIso();
1335 tboccali 1.13 Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
1336 tboccali 1.1 double acop = deltaphi.value();
1337     mf.acop=acop;
1338    
1339 tboccali 1.52 mf.emEnergy = mu->calEnergy().em;
1340     mf.hadEnergy = mu->calEnergy().had;
1341    
1342 tboccali 1.45 mf.nMatches = mu->numberOfMatches();
1343    
1344 tboccali 1.1 mf.ipDb=mu->dB();
1345     mf.ipErrDb=mu->edB();
1346 bortigno 1.23 mf.cat=0;
1347 degrutto 1.61
1348 bortigno 1.22 if(mu->isGlobalMuon()) mf.cat|=1;
1349     if(mu->isTrackerMuon()) mf.cat|=2;
1350 bortigno 1.23 if(mu->isStandAloneMuon()) mf.cat|=4;
1351 tboccali 1.1 TrackRef trkMu1Ref = mu->get<TrackRef>();
1352     if(trkMu1Ref.isNonnull()){
1353     const Track* MuTrk1 = mu->get<TrackRef>().get();
1354     mf.zPVPt=MuTrk1->dz(RecVtxFirst.position());
1355     mf.zPVProb=MuTrk1->dz(RecVtx.position());
1356     mf.nHits=MuTrk1->numberOfValidHits();
1357     mf.chi2=MuTrk1->normalizedChi2();
1358     TrackRef iTrack1 = mu->innerTrack();
1359     const reco::HitPattern& p1 = iTrack1->hitPattern();
1360     mf.nPixelHits=p1.pixelLayersWithMeasurement();
1361 tboccali 1.47
1362     mf.nValidTracker = p1.numberOfValidTrackerHits();
1363     mf.nValidPixel = p1.numberOfValidPixelHits();
1364    
1365    
1366    
1367     }
1368 tboccali 1.1 if(mu->isGlobalMuon()){
1369     TrackRef gTrack = mu->globalTrack();
1370     const reco::HitPattern& q = gTrack->hitPattern();
1371     mf.globChi2=gTrack.get()->normalizedChi2();
1372     mf.globNHits=q.numberOfValidMuonHits();
1373 tboccali 1.40 mf.validMuStations = q.muonStationsWithValidHits();
1374 tboccali 1.1 }else{
1375     mf.globChi2=-99;
1376     mf.globNHits=-99;
1377     }
1378 bortigno 1.18
1379     //Muon trigger matching
1380     for (int itrig = 0; itrig != ntrigs; ++itrig){
1381     std::string trigName=triggerNames_.triggerName(itrig);
1382 arizzi 1.26 if( (mu->triggerObjectMatchesByPath(trigName,false,false).size() != 0) ){
1383 bortigno 1.18 mf.hltMatchedBits.push_back(itrig);
1384     if(verbose_){
1385     std::clog << "Trigger Matching box" << std::endl;
1386     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1387     std::clog << "Matching parameters are defined in the cfg" << std::endl;
1388     std::clog << "Trigger bit = " << itrig << std::endl;
1389     std::clog << "Trigger name = " << trigName << std::endl;
1390 arizzi 1.26 std::clog << "Trigger object matched collection size = " << mu->triggerObjectMatchesByPath(trigName,false,false).size() << std::endl;
1391 bortigno 1.18 std::clog << "Pat Muon pt = " << mf.p4.Pt() << " HLT object matched = " << mu->triggerObjectMatch(0)->p4().Pt() << std::endl;
1392     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1393     }
1394     }
1395     }
1396 tboccali 1.8 //
1397 bortigno 1.18
1398 tboccali 1.8 // add stamuon
1399    
1400     // if (mu->isStandAloneMuon()) {
1401     // reco::TrackRef sta = mu->standAloneMuon();
1402     //
1403     // }
1404    
1405 tboccali 1.1
1406     // int muInfo[12];
1407     // fillMuBlock(mu, muInfo);
1408 tboccali 1.3 if(runOnMC_){
1409 tboccali 1.1 const GenParticle* muMc = mu->genLepton();
1410     if(muMc!=0){
1411     mf.mcId=muMc->pdgId();
1412     mf.mcFourMomentum=GENPTOLORP(muMc);
1413     if(muMc->mother()!=0) mf.mcMomId=muMc->mother()->pdgId();
1414     if(muMc->mother()!=0 && muMc->mother()->mother()!=0) mf.mcgMomId=muMc->mother()->mother()->pdgId();
1415     } }
1416     hbbInfo->muInfo.push_back(mf);
1417     }
1418    
1419 tboccali 1.28 if(verbose_)
1420 bortigno 1.25 std::cout << " INPUT electrons "<<electrons.size()<<std::endl;
1421 tboccali 1.1 for(edm::View<pat::Electron>::const_iterator elec = electrons.begin(); elec!=electrons.end(); ++elec){
1422     VHbbEvent::ElectronInfo ef;
1423 tboccali 1.13 ef.p4=GENPTOLORP(elec);
1424 tboccali 1.1 ef.scEta =elec->superCluster()->eta();
1425     ef.scPhi =elec->superCluster()->phi();
1426     // if(ElecEta[eleccont]!=0) ElecEt[eleccont]=elec->superCluster()->energy()/cosh(elec->superCluster()->eta());
1427     ef.charge=elec->charge();
1428     ef.tIso=elec->trackIso();
1429     ef.eIso=elec->ecalIso();
1430     ef.hIso=elec->hcalIso();
1431 arizzi 1.16 ef.pfChaIso=elec->chargedHadronIso();
1432 degrutto 1.37 ef.pfChaPUIso=elec->userIso(5);
1433 arizzi 1.16 ef.pfPhoIso=elec->photonIso();
1434     ef.pfNeuIso=elec->neutralHadronIso();
1435    
1436 tboccali 1.50 //
1437     // ip info
1438     //
1439    
1440     ef.ipDb=elec->dB();
1441     ef.ipErrDb=elec->edB();
1442    
1443    
1444    
1445 arizzi 1.38 Geom::Phi<double> deltaphi(elec->superCluster()->phi()-atan2(hbbInfo->pfmet.p4.Py(),hbbInfo->pfmet.p4.Px()));
1446 tboccali 1.1 ef.acop = deltaphi.value();
1447 tboccali 1.8 //
1448 tboccali 1.48 ef.sihih = elec->sigmaIetaIeta();
1449     ef.Dphi = elec->deltaPhiSuperClusterTrackAtVtx();
1450     ef.Deta = elec->deltaEtaSuperClusterTrackAtVtx();
1451     ef.HoE = elec->hadronicOverEm();
1452     ef.convDist = elec->convDist();
1453     ef.convDcot = elec->convDcot();
1454     if(elec->gsfTrack().isNonnull()) ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();
1455     ef.isEB = elec->isEB();
1456     ef.isEE = elec->isEE();
1457     //
1458 tboccali 1.8 // fill eleids
1459     //
1460 arizzi 1.16 /* ef.id95 = elec->electronID("simpleEleId95cIso");
1461 tboccali 1.8 ef.id85 = elec->electronID("simpleEleId85cIso");
1462     ef.id70 = elec->electronID("simpleEleId70cIso");
1463     ef.id95r = elec->electronID("simpleEleId95relIso");
1464     ef.id70r = elec->electronID("simpleEleId70relIso");
1465     ef.id85r = elec->electronID("simpleEleId85relIso");
1466 arizzi 1.16 */
1467     ef.id95 =elec->electronID("eidVBTFCom95");
1468     ef.id95r=elec->electronID("eidVBTFRel95");
1469     ef.id85 =elec->electronID("eidVBTFCom85");
1470     ef.id85r=elec->electronID("eidVBTFRel85");
1471     ef.id80 =elec->electronID("eidVBTFCom80");
1472     ef.id80r=elec->electronID("eidVBTFRel80");
1473     ef.id70 =elec->electronID("eidVBTFCom70");
1474     ef.id70r=elec->electronID("eidVBTFRel70");
1475 tboccali 1.8
1476 bortigno 1.25 //Electron trigger matching
1477 bortigno 1.18 for (int itrig = 0; itrig != ntrigs; ++itrig){
1478     std::string trigName=triggerNames_.triggerName(itrig);
1479     if( (elec->triggerObjectMatchesByPath(trigName).size() != 0) ){
1480     ef.hltMatchedBits.push_back(itrig);
1481     if(verbose_){
1482     std::clog << "Trigger Matching box" << std::endl;
1483     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1484     std::clog << "Matching parameters are defined in the cfg" << std::endl;
1485     std::clog << "Trigger bit = " << itrig << std::endl;
1486     std::clog << "Trigger name = " << trigName << std::endl;
1487     std::clog << "Trigger object matched collection size = " << elec->triggerObjectMatchesByPath(trigName).size() << std::endl;
1488     std::clog << "Pat Electron pt = " << ef.p4.Pt() << " HLT object matched = " << elec->triggerObjectMatch(0)->p4().Pt() << std::endl;
1489     std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
1490     }
1491     }
1492     }
1493    
1494 tboccali 1.3 if(runOnMC_){
1495 tboccali 1.1 const GenParticle* elecMc = elec->genLepton();
1496     if(elecMc!=0){
1497     ef.mcId=elecMc->pdgId();
1498     ef.mcFourMomentum=GENPTOLORP(elecMc);
1499     if(elecMc->mother()!=0) ef.mcMomId=elecMc->mother()->pdgId();
1500     if(elecMc->mother()!=0 && elecMc->mother()->mother()!=0) ef.mcgMomId=elecMc->mother()->mother()->pdgId();
1501     }}
1502     hbbInfo->eleInfo.push_back(ef);
1503     }
1504    
1505 bortigno 1.25 if(verbose_)
1506     std::cout << " INPUT taus "<<taus.size()<<std::endl;
1507 tboccali 1.1 for(edm::View<pat::Tau>::const_iterator tau = taus.begin(); tau!=taus.end(); ++tau){
1508     VHbbEvent::TauInfo tf;
1509 tboccali 1.13 tf.p4=GENPTOLORP(tau);
1510 tboccali 1.1 tf.charge=tau->charge();
1511     tf.tIso=tau->trackIso();
1512     tf.eIso=tau->ecalIso();
1513     tf.hIso=tau->hcalIso();
1514 arizzi 1.38 Geom::Phi<double> deltaphi(tau->phi()-atan2(hbbInfo->pfmet.p4.Py(),hbbInfo->pfmet.p4.Px()));
1515 tboccali 1.1 double acop = deltaphi.value();
1516     tf.acop=acop;
1517 sethzenz 1.63 if (tau->isTauIDAvailable("againstElectronLoose")) tf.againstElectronLoose=tau->tauID("againstElectronLoose");
1518     if (tau->isTauIDAvailable("againstElectronMedium")) tf.againstElectronMedium=tau->tauID("againstElectronMedium");
1519     if (tau->isTauIDAvailable("againstElectronTight")) tf.againstElectronTight=tau->tauID("againstElectronTight");
1520     if (tau->isTauIDAvailable("againstMuonLoose")) tf.againstMuonLoose=tau->tauID("againstMuonLoose");
1521     if (tau->isTauIDAvailable("againstMuonTight")) tf.againstMuonTight=tau->tauID("againstMuonTight");
1522     if (tau->isTauIDAvailable("byLooseIsolation")) tf.byLooseIsolation=tau->tauID("byLooseIsolation");
1523     if (tau->isTauIDAvailable("byMediumIsolation")) tf.byMediumIsolation=tau->tauID("byMediumIsolation");
1524     if (tau->isTauIDAvailable("byTightIsolation")) tf.byTightIsolation=tau->tauID("byTightIsolation");
1525     if (tau->isTauIDAvailable("byVLooseIsolation")) tf.byVLooseIsolation=tau->tauID("byVLooseIsolation");
1526     if (tau->isTauIDAvailable("decayModeFinding")) tf.decayModeFinding=tau->tauID("decayModeFinding");
1527     if (tau->isTauIDAvailable("byIsolation")) tf.byIsolation=tau->tauID("byIsolation");
1528     if (tau->isTauIDAvailable("trackIsolation")) tf.trackIsolation=tau->tauID("trackIsolation");
1529     if (tau->isTauIDAvailable("byTaNCfrOnePercent")) tf.byTaNCfrOnePercent=tau->tauID("byTaNCfrOnePercent");
1530     if (tau->isTauIDAvailable("byTaNCfrHalfPercent")) tf.byTaNCfrHalfPercent=tau->tauID("byTaNCfrHalfPercent");
1531     if (tau->isTauIDAvailable("byTaNCfrQuarterPercent")) tf.byTaNCfrQuarterPercent=tau->tauID("byTaNCfrQuarterPercent");
1532     if (tau->isTauIDAvailable("byTaNCfrTenthPercent")) tf.byTaNCfrTenthPercent=tau->tauID("byTaNCfrTenthPercent");
1533     if (tau->isTauIDAvailable("byTaNC")) tf.byTaNC=tau->tauID("byTaNC");
1534     if (tau->isTauIDAvailable("byLooseCombinedIsolationDeltaBetaCorr")) tf.byLooseCombinedIsolationDeltaBetaCorr=tau->tauID("byLooseCombinedIsolationDeltaBetaCorr");
1535     if (tau->isTauIDAvailable("againstElectronMVA")) tf.againstElectronMVA=tau->tauID("againstElectronMVA");
1536 dlopes 1.59 if (tau->isPFTau()) {
1537     tf.isolationPFChargedHadrCandsPtSum = tau->isolationPFChargedHadrCandsPtSum();
1538     tf.isolationPFGammaCandsEtSum = tau->isolationPFGammaCandsEtSum();
1539 sethzenz 1.63 if (tau->leadPFChargedHadrCand().isAvailable()) tf.leadPFChargedHadrCandPt = tau->leadPFChargedHadrCand()->pt();
1540 sethzenz 1.60 tf.NsignalPFChargedHadrCands = tau->signalPFChargedHadrCands().size();
1541     tf.NsignalPFGammaCands = tau->signalPFGammaCands().size();
1542 dlopes 1.59 }
1543 tboccali 1.1 hbbInfo->tauInfo.push_back(tf);
1544 dlopes 1.59 if (verbose_) {
1545 sethzenz 1.63 std::cout << "SCZ DEBUG: againstElectronLoose is " << tf.againstElectronLoose << std::endl;
1546     std::cout << "SCZ DEBUG: againstElectronMedium is " << tf.againstElectronMedium << std::endl;
1547     std::cout << "SCZ DEBUG: againstElectronTight is " << tf.againstElectronTight << std::endl;
1548     std::cout << "SCZ DEBUG: againstMuonLoose is " << tf.againstMuonLoose << std::endl;
1549     std::cout << "SCZ DEBUG: againstMuonTight is " << tf.againstMuonTight << std::endl;
1550     std::cout << "SCZ DEBUG: byLooseIsolation is " << tf.byLooseIsolation << std::endl;
1551     std::cout << "SCZ DEBUG: byMediumIsolation is " << tf.byMediumIsolation << std::endl;
1552     std::cout << "SCZ DEBUG: byTightIsolation is " << tf.byTightIsolation << std::endl;
1553     std::cout << "SCZ DEBUG: byVLooseIsolation is " << tf.byVLooseIsolation << std::endl;
1554     std::cout << "SCZ DEBUG: decayModeFinding is " << tf.decayModeFinding << std::endl;
1555     std::cout << "SCZ DEBUG: byIsolation is " << tf.byIsolation<< std::endl;
1556     std::cout << "SCZ DEBUG: trackIsolation is " << tf.trackIsolation << std::endl;
1557     std::cout << "SCZ DEBUG: byTaNCfrOnePercent is " << tf.byTaNCfrOnePercent << std::endl;
1558     std::cout << "SCZ DEBUG: byTaNCfrHalfPercent is " << tf.byTaNCfrHalfPercent << std::endl;
1559     std::cout << "SCZ DEBUG: byTaNCfrQuarterPercent is " << tf.byTaNCfrQuarterPercent << std::endl;
1560     std::cout << "SCZ DEBUG: byTaNCfrTenthPercent is " << tf.byTaNCfrTenthPercent << std::endl;
1561     std::cout << "SCZ DEBUG: byTaNC is " << tf.byTaNC << std::endl;
1562 dlopes 1.59 std::cout << "SCZ DEBUG: isolationPFChargedHadrCandsPtSum is " << tf.isolationPFChargedHadrCandsPtSum << std::endl;
1563     std::cout << "SCZ DEBUG: isolationPFGammaCandsEtSum is " << tf.isolationPFGammaCandsEtSum << std::endl;
1564     std::cout << "SCZ DEBUG: isolationPFGammaCandsEtSum is " << tf.leadPFChargedHadrCandPt << std::endl;
1565 sethzenz 1.60 std::cout << "SCZ DEBUG: NsignalPFChargedHadrCands is " << tf.NsignalPFChargedHadrCands << std::endl;
1566     std::cout << "SCZ DEBUG: NsignalPFGammaCands is " << tf.NsignalPFGammaCands << std::endl;
1567 sethzenz 1.63 std::cout << "SCZ DEBUG: byLooseCombinedIsolationDeltaBetaCorr is " << tf.byLooseCombinedIsolationDeltaBetaCorr << std::endl;
1568     std::cout << "SCZ DEBUG: againstElectronMVA is " << tf.againstElectronMVA << std::endl;
1569 dlopes 1.59 }
1570 tboccali 1.1 }
1571    
1572 tboccali 1.28 CompareJetPtMuons ptComparatorMu;
1573     CompareJetPtElectrons ptComparatorE;
1574     CompareJetPtTaus ptComparatorTau;
1575    
1576     std::sort(hbbInfo->muInfo.begin(), hbbInfo->muInfo.end(), ptComparatorMu);
1577     std::sort(hbbInfo->eleInfo.begin(), hbbInfo->eleInfo.end(), ptComparatorE);
1578     std::sort(hbbInfo->tauInfo.begin(), hbbInfo->tauInfo.end(), ptComparatorTau);
1579    
1580 tboccali 1.1
1581    
1582    
1583 tboccali 1.9 if (verbose_){
1584     std::cout <<" Pushing hbbInfo "<<std::endl;
1585     std::cout <<" SimpleJets1 = "<<hbbInfo->simpleJets.size()<<std::endl<<
1586     " SimpleJets2 = "<<hbbInfo->simpleJets2.size()<<std::endl<<
1587     " SubJets = "<<hbbInfo->subJets.size()<<std::endl<<
1588     " HardJets = "<<hbbInfo->hardJets.size()<<std::endl<<
1589 dlopes 1.59 " FilterJets = "<<hbbInfo->filterJets.size()<<std::endl<<
1590 tboccali 1.9 " Muons = "<<hbbInfo->muInfo.size()<<std::endl<<
1591     " Electrons = "<<hbbInfo->eleInfo.size()<<std::endl<<
1592     " Taus = "<<hbbInfo->tauInfo.size()<<std::endl<<
1593     " Electrons = "<<hbbInfo->eleInfo.size()<<std::endl<<
1594     "--------------------- "<<std::endl;
1595     }
1596    
1597    
1598 tboccali 1.1 iEvent.put(hbbInfo);
1599 tboccali 1.14 iEvent.put(auxInfo);
1600 tboccali 1.1
1601 tboccali 1.9
1602 tboccali 1.53 delete jecUnc;
1603    
1604 tboccali 1.1 }
1605    
1606     void
1607     HbbAnalyzerNew::fillMuBlock(edm::View<pat::Muon>::const_iterator mu, int muInfo[15])
1608     {
1609     if(muon::isGoodMuon(*mu,muon::TMLastStationLoose)) muInfo[0]=1;
1610     if(muon::isGoodMuon(*mu,muon::TMLastStationTight)) muInfo[1]=1;
1611     if(muon::isGoodMuon(*mu,muon::TM2DCompatibilityLoose)) muInfo[2]=1;
1612     if(muon::isGoodMuon(*mu,muon::TM2DCompatibilityTight)) muInfo[3]=1;
1613     if(muon::isGoodMuon(*mu,muon::TMOneStationLoose)) muInfo[4]=1;
1614     if(muon::isGoodMuon(*mu,muon::TMOneStationTight)) muInfo[5]=1;
1615     if(muon::isGoodMuon(*mu,muon::TMLastStationOptimizedLowPtLoose)) muInfo[6]=1;
1616     if(muon::isGoodMuon(*mu,muon::TMLastStationOptimizedLowPtTight))muInfo[7]=1;
1617     if(muon::isGoodMuon(*mu,muon::TMOneStationAngLoose)) muInfo[8]=1;
1618     if(muon::isGoodMuon(*mu,muon::TMOneStationAngTight)) muInfo[9]=1;
1619     if(muon::isGoodMuon(*mu,muon::TMLastStationAngLoose)) muInfo[10]=1;
1620     if(muon::isGoodMuon(*mu,muon::TMLastStationAngTight)) muInfo[11]=1;
1621     if(muon::isGoodMuon(*mu,muon::GMTkChiCompatibility)) muInfo[12]=1;
1622     if(muon::isGoodMuon(*mu,muon::GMStaChiCompatibility)) muInfo[13]=1;
1623     if(muon::isGoodMuon(*mu,muon::GMTkKinkTight)) muInfo[14]=1;
1624     }
1625    
1626     // ------------ method called once each job just before starting event loop ------------
1627     void
1628     HbbAnalyzerNew::beginJob(){
1629     }
1630    
1631    
1632     // ------------ method called once each job just after ending the event loop ------------
1633     void
1634     HbbAnalyzerNew::endJob() {
1635     }
1636    
1637 tboccali 1.5 TVector2 HbbAnalyzerNew::getTvect( const pat::Jet* patJet ){
1638    
1639     TVector2 t_Vect(0,0);
1640     TVector2 null(0,0);
1641     TVector2 ci(0,0);
1642     TLorentzVector pi(0,0,0,0);
1643     TLorentzVector J(0,0,0,0);
1644     TVector2 r(0,0);
1645     double patJetpfcPt = 1e10;
1646     double r_mag = 1e10;
1647     unsigned int nOfconst = 0;
1648    
1649 tboccali 1.6
1650     if (patJet->isPFJet() == false) {
1651     return t_Vect;
1652     }
1653    
1654    
1655     //re-reconstruct the jet direction with the charged tracks
1656 tboccali 1.5 std::vector<reco::PFCandidatePtr>
1657     patJetpfc = patJet->getPFConstituents();
1658     for(size_t idx = 0; idx < patJetpfc.size(); idx++){
1659     if( patJetpfc.at(idx)->charge() != 0 ){
1660     pi.SetPtEtaPhiE( patJetpfc.at(idx)->pt(), patJetpfc.at(idx)->eta(), patJetpfc.at(idx)->phi(), patJetpfc.at(idx)->energy() );
1661     J += pi;
1662     nOfconst++;
1663     }
1664     }
1665     // if there are less than two charged tracks do not calculate the pull (there is not enough info). It returns a null vector
1666    
1667     if( nOfconst < 2 )
1668     return null;
1669 tboccali 1.6
1670    
1671 tboccali 1.5
1672     TVector2 v_J( J.Rapidity(), J.Phi() );
1673     //calculate TVector using only charged tracks
1674     for(size_t idx = 0; idx < patJetpfc.size(); idx++){
1675     if( patJetpfc.at(idx)->charge() != 0 ){
1676     patJetpfcPt = patJetpfc.at(idx)->pt();
1677     pi.SetPtEtaPhiE( patJetpfc.at(idx)->pt(), patJetpfc.at(idx)->eta(), patJetpfc.at(idx)->phi(), patJetpfc.at(idx)->energy() );
1678     r.Set( pi.Rapidity() - J.Rapidity(), Geom::deltaPhi( patJetpfc.at(idx)->phi(), J.Phi() ) );
1679     r_mag = r.Mod();
1680     t_Vect += ( patJetpfcPt / J.Pt() ) * r_mag * r;
1681     }
1682     }
1683    
1684 tboccali 1.6
1685 tboccali 1.5 return t_Vect;
1686    
1687     }
1688    
1689 tboccali 1.6 TLorentzVector HbbAnalyzerNew::getChargedTracksMomentum(const pat::Jet* patJet ){
1690     // return TLorentzVector();
1691     TLorentzVector pi(0,0,0,0);
1692     TLorentzVector v_j1(0,0,0,0);
1693    
1694    
1695     // std::cout <<"fff ECCCCCCOOOOO "<<patJet->isPFJet()<<std::endl;
1696    
1697     if (patJet->isPFJet() == false ){
1698     v_j1 = GENPTOLORP(patJet);
1699     return v_j1;
1700     }
1701     std::vector<reco::PFCandidatePtr>
1702     j1pfc = patJet->getPFConstituents();
1703     for(size_t idx = 0; idx < j1pfc.size(); idx++){
1704     if( j1pfc.at(idx)->charge() != 0 ){
1705     pi.SetPtEtaPhiE( j1pfc.at(idx)->pt(), j1pfc.at(idx)->eta(), j1pfc.at(idx)->phi(), j1pfc.at(idx)->energy() );
1706     v_j1 += pi;
1707     }
1708     }
1709     return v_j1;
1710     //re-
1711     }
1712 tboccali 1.5
1713 bortigno 1.24
1714     //Btagging scale factors
1715 tboccali 1.33 void HbbAnalyzerNew::fillScaleFactors(VHbbEvent::SimpleJet& sj, BTagSFContainer iSF){
1716 bortigno 1.24
1717    
1718     BinningPointByMap measurePoint;
1719     //for a USDG
1720     //for CB jets
1721     //scale factor 1 for CB jets over 240GeV/c
1722     if( TMath::Abs(sj.flavour) == 4 or TMath::Abs(sj.flavour) == 5 ){
1723     measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
1724     measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
1725     if( iSF.BTAGSF_CSVL->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1726     sj.SF_CSVL = iSF.BTAGSF_CSVL->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1727     sj.SF_CSVLerr = iSF.BTAGSF_CSVL->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1728     if(verbose_){
1729     std::clog << "C/B Jet flavour = " << sj.flavour << std::endl;
1730     std::clog << "C/B Jet Et = " << sj.p4.Et() << std::endl;
1731     std::clog << "C/B Jet eta = " << sj.p4.Eta() << std::endl;
1732     std::clog << "C/B CSVL Scale Factor = " << sj.SF_CSVL << std::endl;
1733     std::clog << "C/B CSVL Scale Factor error = " << sj.SF_CSVLerr << std::endl;
1734     }
1735     }
1736     if( iSF.BTAGSF_CSVM->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1737     sj.SF_CSVM = iSF.BTAGSF_CSVM->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1738     sj.SF_CSVMerr = iSF.BTAGSF_CSVM->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1739     }
1740     if( iSF.BTAGSF_CSVT->isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
1741     sj.SF_CSVT = iSF.BTAGSF_CSVT->getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
1742     sj.SF_CSVTerr = iSF.BTAGSF_CSVT->getResult(PerformanceResult::BTAGBERRCORR , measurePoint);
1743     }
1744     else{
1745     if(verbose_){
1746 bortigno 1.25 std::cerr << "No SF found in the database for this jet" << std::endl;
1747 bortigno 1.24 std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
1748     std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
1749     std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
1750     }
1751     }
1752     }
1753     else {
1754     measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
1755     measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
1756     if( iSF.MISTAGSF_CSVL->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1757     sj.SF_CSVL = iSF.MISTAGSF_CSVL->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1758     sj.SF_CSVLerr = iSF.MISTAGSF_CSVL->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1759     if(verbose_){
1760     std::clog << "Light Jet flavour = " << sj.flavour << std::endl;
1761     std::clog << "Light Jet Et = " << sj.p4.Et() << std::endl;
1762     std::clog << "Light Jet eta = " << sj.p4.Eta() << std::endl;
1763     std::clog << "Light CSVL Scale Factor = " << sj.SF_CSVL << std::endl;
1764     std::clog << "Light CSVL Scale Factor error = " << sj.SF_CSVLerr << std::endl;
1765     }
1766     }
1767     if( iSF.MISTAGSF_CSVM->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1768     sj.SF_CSVM = iSF.MISTAGSF_CSVM->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1769     sj.SF_CSVMerr = iSF.MISTAGSF_CSVM->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1770     }
1771     if( iSF.MISTAGSF_CSVT->isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
1772     sj.SF_CSVT = iSF.MISTAGSF_CSVT->getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
1773     sj.SF_CSVTerr = iSF.MISTAGSF_CSVT->getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
1774     }
1775     else{
1776     if(verbose_){
1777 bortigno 1.25 std::cerr << "No SF found in the database for this jet" << std::endl;
1778 bortigno 1.24 std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
1779     std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
1780     std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
1781     }
1782     }
1783     }
1784    
1785     }
1786    
1787 tboccali 1.28 void HbbAnalyzerNew::setJecUnc(VHbbEvent::SimpleJet& sj,JetCorrectionUncertainty* jecunc){
1788 tboccali 1.29 //
1789     // test
1790     //
1791    
1792 tboccali 1.49 // return;
1793 tboccali 1.28 double eta = sj.p4.Eta();
1794     double pt = sj.p4.Pt();
1795    
1796     jecunc->setJetEta(eta);
1797     jecunc->setJetPt(pt); // here you must use the CORRECTED jet pt
1798     double unc = jecunc->getUncertainty(true);
1799     sj.jecunc= unc;
1800     }
1801    
1802    
1803     void HbbAnalyzerNew ::fillSimpleJet (VHbbEvent::SimpleJet& sj, edm::View<pat::Jet>::const_iterator jet_iter){
1804     sj.flavour = jet_iter->partonFlavour();
1805    
1806     sj.tche=jet_iter->bDiscriminator("trackCountingHighEffBJetTags");
1807     sj.tchp=jet_iter->bDiscriminator("trackCountingHighPurBJetTags");
1808     sj.jp=jet_iter->bDiscriminator("jetProbabilityBJetTags");
1809     sj.jpb=jet_iter->bDiscriminator("jetBProbabilityBJetTags");
1810     sj.ssvhe=jet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1811     sj.csv=jet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
1812 arizzi 1.65 sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
1813     sj.csvivf=jet_iter->bDiscriminator("combinedInclusiveSecondaryVertexBJetTags");
1814     sj.cmva=jet_iter->bDiscriminator("combinedMVABJetTags");
1815 tboccali 1.28 sj.charge=jet_iter->jetCharge();
1816     sj.ntracks=jet_iter->associatedTracks().size();
1817     sj.p4=GENPTOLORP(jet_iter);
1818 tboccali 1.44 // std::cout << " ECCO "<<sj.csv<< " "<< sj.p4.Pt()<<std::endl;
1819 tboccali 1.28 sj.chargedTracksFourMomentum=(getChargedTracksMomentum(&*(jet_iter)));
1820     sj.SF_CSVL=1;
1821     sj.SF_CSVM=1;
1822     sj.SF_CSVT=1;
1823     sj.SF_CSVLerr=0;
1824     sj.SF_CSVMerr=0;
1825     sj.SF_CSVTerr=0;
1826    
1827    
1828 tboccali 1.29 if (jet_iter->isPFJet() == true) {
1829 tboccali 1.28
1830 tboccali 1.29 sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction();
1831     sj.neutralHadronEFraction = jet_iter-> neutralHadronEnergyFraction ();
1832     sj.chargedEmEFraction = jet_iter-> chargedEmEnergyFraction ();
1833     sj.neutralEmEFraction = jet_iter-> neutralEmEnergyFraction ();
1834 tboccali 1.40 sj.nConstituents = jet_iter->getPFConstituents().size();
1835 tboccali 1.29
1836     }
1837 malbouis 1.68 sj.jetArea = jet_iter->jetArea();
1838 tboccali 1.28 //
1839     // addtaginfo for csv
1840     //
1841    
1842     // if (jet_iter->hasTagInfo("SimpleSecondaryVertex")) {
1843    
1844     const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
1845 tboccali 1.31 if (tf){
1846 arizzi 1.66 math::XYZTLorentzVectorD vertexSum;
1847     for(size_t vi=0;vi< tf->nVertices();vi++)
1848     {
1849     vertexSum+=tf->secondaryVertex(vi).p4();
1850     }
1851     sj.vtxP4 = GENPTOLOR(vertexSum);
1852    
1853 tboccali 1.32 if (tf->nVertices() >0){
1854 arizzi 1.66 sj.vtxPosition = TVector3(tf->secondaryVertex(0).position().x(),tf->secondaryVertex(0).position().y(),tf->secondaryVertex(0).position().z());
1855     sj.vtxMass = tf->secondaryVertex(0).p4().mass();
1856 tboccali 1.32 sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
1857     std::vector<reco::TrackBaseRef >::const_iterator tit = tf->secondaryVertex(0).tracks_begin();
1858     for (; tit< tf->secondaryVertex(0).tracks_end(); ++tit){
1859     sj.vtxTrackIds.push_back(tit->key());
1860     }
1861     Measurement1D m = tf->flightDistance(0);
1862     sj.vtx3dL = m.value();
1863     sj.vtx3deL = m.error();
1864     }
1865 tboccali 1.28 }
1866 malbouis 1.68
1867     // CSV track info
1868     const reco::SecondaryVertexTagInfo * svTagInfos = jet_iter->tagInfoSecondaryVertex();
1869     const reco::TrackIPTagInfo * ipTagInfos = jet_iter->tagInfoTrackIP();
1870     for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
1871     sj.btagTrackIds.push_back(t->key());
1872     }// all btag IP selected tracks
1873     std::vector<const reco::BaseTagInfo*> tagInfos;
1874     tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(ipTagInfos));
1875     tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(svTagInfos));
1876     JetTagComputer::TagInfoHelper helper(tagInfos);
1877     reco::TaggingVariableList varList = computer->taggingVariables(helper); // computer for getting CSV variables
1878    
1879     for(reco::TaggingVariableList::const_iterator iter = varList.begin(); iter != varList.end(); ++iter)
1880     {
1881     //std::cout << reco::TaggingVariableTokens[iter->first] << " = " << iter->second << std::endl;
1882     for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
1883    
1884     if (strcmp(reco::TaggingVariableTokens[iter->first], "trackMomentum") == 0 && (fabs((float)iter->second - (float)(*t)->p()) < 0.0001) ){
1885     sj.csvTrackIds.push_back(t->key());
1886     }// if tagged track
1887     }// loop on IPtracks
1888     }// loop on CSV variables
1889    
1890    
1891     sj.btagNTracks= ipTagInfos->selectedTracks().size();
1892     sj.csvNTracks = sj.csvTrackIds.size();
1893    
1894 tboccali 1.28 //
1895     // add tVector
1896     //
1897     sj.tVector = getTvect(&(*jet_iter));
1898 degrutto 1.58
1899 dlopes 1.67 sj.ptRaw = jet_iter->correctedJet(0).pt();
1900    
1901     sj.ptLeadTrack =-9999.;
1902     if (jet_iter->isPFJet() == true) {
1903     std::vector <reco::PFCandidatePtr> constituents = jet_iter->getPFConstituents ();
1904     for (unsigned ic = 0; ic < constituents.size (); ++ic) {
1905     if ( constituents[ic]->particleId() > 3 ) continue;
1906     reco::TrackRef trackRef = constituents[ic]->trackRef();
1907     if ( trackRef.isNonnull() ) { if(trackRef->pt() > sj.ptLeadTrack) sj.ptLeadTrack=trackRef->pt(); }
1908     }
1909     }
1910    
1911 degrutto 1.58
1912 tboccali 1.28 }
1913    
1914 arizzi 1.56 float HbbAnalyzerNew::metSignificance(const reco::MET * met)
1915     {
1916     double sigmaX2= met->getSignificanceMatrix()(0,0);
1917     double sigmaY2= met->getSignificanceMatrix()(1,1);
1918     double significance = 0;
1919     try {
1920     if(sigmaX2<1.e10 && sigmaY2<1.e10) significance = met->significance();
1921     }
1922     catch(...)
1923     {
1924     std::cout << "PROBLEM WITH MET SIGNIFICANCE sigma X2 and Y2 are: " << sigmaX2 << " " << sigmaY2 << std::endl;
1925     }
1926     return significance;
1927     }
1928    
1929 tboccali 1.28
1930 tboccali 1.1 //define this as a plug-in
1931     DEFINE_FWK_MODULE(HbbAnalyzerNew);