ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.32
Committed: Tue May 31 16:27:55 2011 UTC (13 years, 11 months ago) by agilbert
Content type: text/plain
Branch: MAIN
CVS Tags: v00-05-03
Changes since 1.31: +8 -15 lines
Log Message:
Several changes to be ready for 42X data processing.

File Contents

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