ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.42
Committed: Thu Sep 1 14:07:31 2011 UTC (13 years, 8 months ago) by amagnan
Content type: text/plain
Branch: MAIN
Changes since 1.41: +23 -40 lines
Log Message:
minor changes related to genParticles and gen info

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