ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/plugins/HbbTreeMaker.cc
Revision: 1.47
Committed: Sat Oct 29 08:04:37 2011 UTC (13 years, 6 months ago) by agilbert
Content type: text/plain
Branch: MAIN
CVS Tags: v01-00-00
Changes since 1.46: +69 -7 lines
Log Message:
Updates for skimming, fix trigger match names for leptons.

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