ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.29
Committed: Wed May 4 14:21:43 2011 UTC (14 years ago) by agilbert
Content type: text/plain
Branch: MAIN
Changes since 1.28: +148 -6 lines
Log Message:
Some additional info for JPT jets: info on charged consituents

File Contents

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