ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.36
Committed: Thu Jun 23 08:39:31 2011 UTC (13 years, 10 months ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.35: +3 -2 lines
Log Message:
Only fill LHE info if collection is valid

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