ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbAnalyzerNew.cc
Revision: 1.73
Committed: Wed May 16 15:13:51 2012 UTC (13 years ago) by degrutto
Content type: text/plain
Branch: MAIN
Changes since 1.72: +51 -5 lines
Log Message:
Pile-up JetId info added

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