ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.37
Committed: Thu Jun 23 13:03:51 2011 UTC (13 years, 10 months ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.36: +24 -0 lines
Log Message:
Added PU info to tree.

File Contents

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