ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/UHHAnalysis/NtupleWriter/src/NtupleWriter.cc
Revision: 1.18
Committed: Wed May 30 13:20:08 2012 UTC (12 years, 11 months ago) by peiffer
Content type: text/plain
Branch: MAIN
Changes since 1.17: +8 -1 lines
Log Message:
rho parameter and some small changes

File Contents

# User Rev Content
1 peiffer 1.1 // -*- C++ -*-
2     //
3     // Package: NtupleWriter
4     // Class: NtupleWriter
5     //
6     /**\class NtupleWriter NtupleWriter.cc NtupleWriter/src/NtupleWriter.cc
7    
8     Description: [one line class summary]
9    
10     Implementation:
11     [Notes on implementation]
12     */
13     //
14     // Original Author: Thomas Peiffer,,,Uni Hamburg
15     // Created: Tue Mar 13 08:43:34 CET 2012
16 peiffer 1.18 // $Id: NtupleWriter.cc,v 1.17 2012/05/22 09:32:31 peiffer Exp $
17 peiffer 1.1 //
18     //
19    
20 peiffer 1.2 #include "UHHAnalysis//NtupleWriter/interface/NtupleWriter.h"
21 peiffer 1.1
22    
23    
24     //
25     // constants, enums and typedefs
26     //
27    
28     //
29     // static data member definitions
30     //
31    
32     //
33     // constructors and destructor
34     //
35     NtupleWriter::NtupleWriter(const edm::ParameterSet& iConfig)
36    
37     {
38     //now do what ever initialization is needed
39     //edm::Service<TFileService> fs;
40     //tr = fs->make<TTree>("AnalysisTree","AnalysisTree");
41    
42     fileName = iConfig.getParameter<std::string>("fileName");
43     outfile = new TFile(fileName,"RECREATE");
44     outfile->cd();
45     tr = new TTree("AnalysisTree","AnalysisTree");
46    
47     std::string name;
48    
49     doElectrons = iConfig.getParameter<bool>("doElectrons");
50     doMuons = iConfig.getParameter<bool>("doMuons");
51     doTaus = iConfig.getParameter<bool>("doTaus");
52     doJets = iConfig.getParameter<bool>("doJets");
53 peiffer 1.14 doGenTopJets = iConfig.getParameter<bool>("doGenTopJets");
54 peiffer 1.1 doPhotons = iConfig.getParameter<bool>("doPhotons");
55     doMET = iConfig.getParameter<bool>("doMET");
56     doGenInfo = iConfig.getParameter<bool>("doGenInfo");
57 peiffer 1.11 doAllGenParticles = iConfig.getParameter<bool>("doAllGenParticles");
58 peiffer 1.10 doLumiInfo = iConfig.getParameter<bool>("doLumiInfo");
59 peiffer 1.1 doPV = iConfig.getParameter<bool>("doPV");
60     doTopJets = iConfig.getParameter<bool>("doTopJets");
61 peiffer 1.6 doTrigger = iConfig.getParameter<bool>("doTrigger");
62 peiffer 1.1
63     // initialization of tree variables
64    
65     tr->Branch("run",&run);
66     tr->Branch("event",&event);
67     tr->Branch("luminosityBlock",&luminosityBlock);
68     tr->Branch("isRealData",&isRealData);
69 peiffer 1.18 tr->Branch("rho",&rho);
70     rho_source = iConfig.getParameter<edm::InputTag>("rho_source");
71    
72 peiffer 1.17 //tr->Branch("HBHENoiseFilterResult",&HBHENoiseFilterResult);
73 peiffer 1.10 if(doLumiInfo){
74     tr->Branch("intgRecLumi",&intgRecLumi);
75     tr->Branch("intgDelLumi",&intgDelLumi);
76     }
77 peiffer 1.8 if(doPV){
78     tr->Branch("beamspot_x0",&beamspot_x0);
79     tr->Branch("beamspot_y0",&beamspot_y0);
80     tr->Branch("beamspot_z0",&beamspot_z0);
81     }
82 peiffer 1.1 if(doElectrons){
83     electron_sources = iConfig.getParameter<std::vector<std::string> >("electron_sources");
84     for(size_t j=0; j< electron_sources.size(); ++j){
85     tr->Branch( electron_sources[j].c_str(), "std::vector<Electron>", &eles[j]);
86     }
87     }
88     if(doMuons){
89     muon_sources = iConfig.getParameter<std::vector<std::string> >("muon_sources");
90     for(size_t j=0; j< muon_sources.size(); ++j){
91     tr->Branch( muon_sources[j].c_str(), "std::vector<Muon>", &mus[j]);
92     }
93     }
94     if(doTaus){
95     tau_sources = iConfig.getParameter<std::vector<std::string> >("tau_sources");
96     tau_ptmin = iConfig.getParameter<double> ("tau_ptmin");
97     tau_etamax = iConfig.getParameter<double> ("tau_etamax");
98     for(size_t j=0; j< tau_sources.size(); ++j){
99     tr->Branch( tau_sources[j].c_str(), "std::vector<Tau>", &taus[j]);
100     }
101     }
102     if(doJets){
103     jet_sources = iConfig.getParameter<std::vector<std::string> >("jet_sources");
104     jet_ptmin = iConfig.getParameter<double> ("jet_ptmin");
105     jet_etamax = iConfig.getParameter<double> ("jet_etamax");
106     for(size_t j=0; j< jet_sources.size(); ++j){
107     tr->Branch( jet_sources[j].c_str(), "std::vector<Jet>", &jets[j]);
108     }
109     }
110     if(doTopJets){
111     topjet_sources = iConfig.getParameter<std::vector<std::string> >("topjet_sources");
112     topjet_ptmin = iConfig.getParameter<double> ("topjet_ptmin");
113     topjet_etamax = iConfig.getParameter<double> ("topjet_etamax");
114     for(size_t j=0; j< topjet_sources.size(); ++j){
115     tr->Branch( topjet_sources[j].c_str(), "std::vector<TopJet>", &topjets[j]);
116     }
117     }
118 peiffer 1.14 if(doGenTopJets){
119     gentopjet_sources = iConfig.getParameter<std::vector<std::string> >("gentopjet_sources");
120     gentopjet_ptmin = iConfig.getParameter<double> ("gentopjet_ptmin");
121     gentopjet_etamax = iConfig.getParameter<double> ("gentopjet_etamax");
122     for(size_t j=0; j< gentopjet_sources.size(); ++j){
123     tr->Branch( gentopjet_sources[j].c_str(), "std::vector<TopJet>", &gentopjets[j]);
124     }
125     }
126 peiffer 1.1 if(doPhotons){
127     photon_sources = iConfig.getParameter<std::vector<std::string> >("photon_sources");
128     for(size_t j=0; j< photon_sources.size(); ++j){
129     tr->Branch( photon_sources[j].c_str(), "std::vector<Photon>", &phs[j]);
130     }
131     }
132     if(doMET){
133     met_sources = iConfig.getParameter<std::vector<std::string> >("met_sources");
134     for(size_t j=0; j< met_sources.size(); ++j){
135     tr->Branch(met_sources[j].c_str(), "MET", &met[j]);
136     }
137     }
138     if(doPV){
139     pv_sources = iConfig.getParameter<std::vector<std::string> >("pv_sources");
140     for(size_t j=0; j< pv_sources.size(); ++j){
141     tr->Branch( pv_sources[j].c_str(), "std::vector<PrimaryVertex>", &pvs[j]);
142     }
143     }
144     if(doGenInfo){
145     tr->Branch("genInfo","GenInfo",&genInfo);
146     tr->Branch("GenParticles","std::vector<GenParticle>", &genps);
147     }
148 peiffer 1.6 if(doTrigger){
149     trigger_prefixes = iConfig.getParameter<std::vector<std::string> >("trigger_prefixes");
150     //tr->Branch("triggerResults","std::map<std::string, bool>",&triggerResults);
151     tr->Branch("triggerNames", "std::vector<std::string>", &triggerNames);
152     tr->Branch("triggerResults", "std::vector<bool>", &triggerResults);
153 peiffer 1.16 //tr->Branch("L1_prescale", "std::vector<int>", &L1_prescale);
154     //tr->Branch("HLT_prescale", "std::vector<int>", &HLT_prescale);
155 peiffer 1.6 }
156 peiffer 1.1 newrun = true;
157     }
158    
159    
160     NtupleWriter::~NtupleWriter()
161     {
162    
163     // do anything here that needs to be done at desctruction time
164     // (e.g. close files, deallocate resources etc.)
165    
166     }
167    
168    
169     //
170     // member functions
171     //
172    
173     // ------------ method called for each event ------------
174     void
175     NtupleWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
176     {
177     // using namespace edm;
178    
179    
180     // ------------- common variables -------------
181    
182     run = iEvent.id().run();
183     event = iEvent.id().event();
184     luminosityBlock = iEvent.luminosityBlock();
185     isRealData = iEvent.isRealData();
186    
187 peiffer 1.18 edm::Handle<double> m_rho;
188     iEvent.getByLabel(rho_source,m_rho);
189     rho=*m_rho;
190    
191 peiffer 1.17 // if(isRealData){
192     // edm::Handle<bool> bool_handle;
193     // iEvent.getByLabel(edm::InputTag("HBHENoiseFilterResultProducer","HBHENoiseFilterResult"),bool_handle);
194     // HBHENoiseFilterResult = *(bool_handle.product());
195     // }
196     // else HBHENoiseFilterResult = false;
197 peiffer 1.1
198 peiffer 1.5 // ------------- primary vertices and beamspot -------------
199    
200     if(doPV){
201     for(size_t j=0; j< pv_sources.size(); ++j){
202     pvs[j].clear();
203    
204     edm::Handle< std::vector<reco::Vertex> > pv_handle;
205     iEvent.getByLabel(pv_sources[j], pv_handle);
206     const std::vector<reco::Vertex>& reco_pvs = *(pv_handle.product());
207    
208     for (unsigned int i = 0; i < reco_pvs.size(); ++i) {
209     reco::Vertex reco_pv = reco_pvs[i];
210    
211     PrimaryVertex pv;
212 peiffer 1.17 pv.set_x( reco_pv.x());
213     pv.set_y( reco_pv.y());
214     pv.set_z( reco_pv.z());
215     pv.set_nTracks( reco_pv.nTracks());
216     //pv.set_isValid( reco_pv.isValid());
217     pv.set_chi2( reco_pv.chi2());
218     pv.set_ndof( reco_pv.ndof());
219 peiffer 1.5
220     pvs[j].push_back(pv);
221     }
222     }
223 peiffer 1.8
224     edm::Handle<reco::BeamSpot> beamSpot;
225     iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
226     const reco::BeamSpot & bsp = *beamSpot;
227    
228     beamspot_x0 = bsp.x0();
229     beamspot_y0 = bsp.y0();
230     beamspot_z0 = bsp.z0();
231 peiffer 1.5 }
232    
233 peiffer 1.15 // ------------- generator info -------------
234    
235     if(doGenInfo){
236 peiffer 1.17 genInfo.clear_weights();
237     genInfo.clear_binningValues();
238 peiffer 1.15 genps.clear();
239    
240     edm::Handle<GenEventInfoProduct> genEventInfoProduct;
241     iEvent.getByLabel("generator", genEventInfoProduct);
242     const GenEventInfoProduct& genEventInfo = *(genEventInfoProduct.product());
243    
244 peiffer 1.17 for(unsigned int k=0; k<genEventInfo.binningValues().size();++k){
245     genInfo.add_binningValue(genEventInfo.binningValues().at(k));
246     }
247     for(unsigned int k=0; k<genEventInfo.weights().size();++k){
248     genInfo.add_weight(genEventInfo.weights().at(k));
249     }
250     genInfo.set_alphaQCD(genEventInfo.alphaQCD());
251     genInfo.set_alphaQED(genEventInfo.alphaQED());
252     genInfo.set_qScale(genEventInfo.qScale());
253 peiffer 1.15
254     const gen::PdfInfo* pdf = genEventInfo.pdf();
255     if(pdf){
256 peiffer 1.17 genInfo.set_pdf_id1(pdf->id.first);
257     genInfo.set_pdf_id2(pdf->id.second);
258     genInfo.set_pdf_x1(pdf->x.first);
259     genInfo.set_pdf_x2(pdf->x.second);
260     genInfo.set_pdf_scalePDF(pdf->scalePDF);
261     genInfo.set_pdf_xPDF1(pdf->xPDF.first);
262     genInfo.set_pdf_xPDF2(pdf->xPDF.second);
263 peiffer 1.15 }
264     else{
265 peiffer 1.17 genInfo.set_pdf_id1(-999);
266     genInfo.set_pdf_id2(-999);
267     genInfo.set_pdf_x1(-999);
268     genInfo.set_pdf_x2(-999);
269     genInfo.set_pdf_scalePDF(-999);
270     genInfo.set_pdf_xPDF1(-999);
271     genInfo.set_pdf_xPDF2(-999);
272 peiffer 1.15 }
273    
274     edm::Handle<std::vector<PileupSummaryInfo> > pus;
275     iEvent.getByLabel(edm::InputTag("addPileupInfo"), pus);
276 peiffer 1.17 genInfo.set_pileup_NumInteractions_intime(0);
277     genInfo.set_pileup_NumInteractions_ootbefore(0);
278     genInfo.set_pileup_NumInteractions_ootafter(0);
279 peiffer 1.15 if(pus.isValid()){
280 peiffer 1.17 genInfo.set_pileup_TrueNumInteractions ( (float) pus->at(0).getTrueNumInteractions());
281 peiffer 1.15 for(size_t i=0; i<pus->size(); ++i){
282     if(pus->at(i).getBunchCrossing() == 0) // intime pileup
283 peiffer 1.17 genInfo.set_pileup_NumInteractions_intime( genInfo.pileup_NumInteractions_intime() + pus->at(i).getPU_NumInteractions());
284 peiffer 1.15 else if(pus->at(i).getBunchCrossing() == -1){ // oot pileup before
285 peiffer 1.17 genInfo.set_pileup_NumInteractions_ootbefore( genInfo.pileup_NumInteractions_ootbefore() + pus->at(i).getPU_NumInteractions());
286 peiffer 1.15 }
287     else if(pus->at(i).getBunchCrossing() == +1){ // oot pileup before
288 peiffer 1.17 genInfo.set_pileup_NumInteractions_ootafter( genInfo.pileup_NumInteractions_ootafter() + pus->at(i).getPU_NumInteractions());
289 peiffer 1.15 }
290     }
291     }
292    
293     edm::Handle<reco::GenParticleCollection> genPartColl;
294     iEvent.getByLabel(edm::InputTag("genParticles"), genPartColl);
295     int index=-1;
296     for(reco::GenParticleCollection::const_iterator iter = genPartColl->begin(); iter != genPartColl->end(); ++ iter){
297     index++;
298    
299     //write out only top quarks and status 3 particles (works fine only for MadGraph)
300     if(abs(iter->pdgId())==6 || iter->status()==3 || doAllGenParticles){
301     GenParticle genp;
302 peiffer 1.17 genp.set_charge(iter->charge());
303     genp.set_pt(iter->p4().pt());
304     genp.set_eta(iter->p4().eta());
305     genp.set_phi(iter->p4().phi());
306     genp.set_energy(iter->p4().E());
307     genp.set_index(index);
308     genp.set_status( iter->status());
309     genp.set_pdgId( iter->pdgId());
310    
311     genp.set_mother1(-1);
312     genp.set_mother2(-1);
313     genp.set_daughter1(-1);
314     genp.set_daughter2(-1);
315 peiffer 1.15
316     int nm=iter->numberOfMothers();
317     int nd=iter->numberOfDaughters();
318    
319    
320 peiffer 1.17 if (nm>0) genp.set_mother1( iter->motherRef(0).key());
321     if (nm>1) genp.set_mother2( iter->motherRef(1).key());
322     if (nd>0) genp.set_daughter1( iter->daughterRef(0).key());
323     if (nd>1) genp.set_daughter2( iter->daughterRef(1).key());
324    
325 peiffer 1.15 genps.push_back(genp);
326     }
327     }
328     }
329    
330 peiffer 1.1 // ------------- electrons -------------
331     if(doElectrons){
332 peiffer 1.10
333     edm::Handle<reco::ConversionCollection> hConversions;
334     iEvent.getByLabel("allConversions", hConversions);
335    
336     edm::Handle<reco::BeamSpot> beamSpot;
337     iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
338     const reco::BeamSpot & bsp = *beamSpot;
339    
340 peiffer 1.1 for(size_t j=0; j< electron_sources.size(); ++j){
341     eles[j].clear();
342     edm::Handle< std::vector<pat::Electron> > ele_handle;
343     iEvent.getByLabel(electron_sources[j], ele_handle);
344     const std::vector<pat::Electron>& pat_electrons = *(ele_handle.product());
345    
346     for (unsigned int i = 0; i < pat_electrons.size(); ++i) {
347     pat::Electron pat_ele = pat_electrons[i];
348     Electron ele;
349    
350 peiffer 1.17 ele.set_charge( pat_ele.charge());
351     ele.set_pt( pat_ele.pt());
352     ele.set_eta( pat_ele.eta());
353     ele.set_phi( pat_ele.phi());
354     ele.set_energy( pat_ele.energy());
355     ele.set_vertex_x(pat_ele.vertex().x());
356     ele.set_vertex_y(pat_ele.vertex().y());
357     ele.set_vertex_z(pat_ele.vertex().z());
358     ele.set_supercluster_eta(pat_ele.superCluster()->eta());
359     ele.set_supercluster_phi(pat_ele.superCluster()->phi());
360     ele.set_dB(pat_ele.dB());
361     //ele.set_particleIso(pat_ele.particleIso());
362     ele.set_neutralHadronIso(pat_ele.neutralHadronIso());
363     ele.set_chargedHadronIso(pat_ele.chargedHadronIso());
364     ele.set_trackIso(pat_ele.trackIso());
365     ele.set_photonIso(pat_ele.photonIso());
366     ele.set_puChargedHadronIso(pat_ele.puChargedHadronIso());
367     ele.set_gsfTrack_trackerExpectedHitsInner_numberOfLostHits(pat_ele.gsfTrack()->trackerExpectedHitsInner().numberOfLostHits());
368     ele.set_gsfTrack_px( pat_ele.gsfTrack()->px());
369     ele.set_gsfTrack_py( pat_ele.gsfTrack()->py());
370     ele.set_gsfTrack_pz( pat_ele.gsfTrack()->pz());
371     ele.set_gsfTrack_vx( pat_ele.gsfTrack()->vx());
372     ele.set_gsfTrack_vy( pat_ele.gsfTrack()->vy());
373     ele.set_gsfTrack_vz( pat_ele.gsfTrack()->vz());
374     ele.set_passconversionveto(!ConversionTools::hasMatchedConversion(pat_ele,hConversions,bsp.position()));
375     ele.set_dEtaIn(pat_ele.deltaEtaSuperClusterTrackAtVtx());
376     ele.set_dPhiIn(pat_ele.deltaPhiSuperClusterTrackAtVtx());
377     ele.set_sigmaIEtaIEta(pat_ele.sigmaIetaIeta());
378     ele.set_HoverE(pat_ele.hadronicOverEm());
379     ele.set_fbrem(pat_ele.fbrem());
380     ele.set_EoverPIn(pat_ele.eSuperClusterOverP());
381     ele.set_EcalEnergy(pat_ele.ecalEnergy());
382     //ele.set_mvaTrigV0(pat_ele.electronID("mvaTrigV0"));
383     //ele.set_mvaNonTrigV0(pat_ele.electronID("mvaNonTrigV0"));
384 peiffer 1.11
385 peiffer 1.1 eles[j].push_back(ele);
386     }
387     }
388     }
389    
390     // ------------- muons -------------
391     if(doMuons){
392     for(size_t j=0; j< muon_sources.size(); ++j){
393     mus[j].clear();
394    
395     edm::Handle< std::vector<pat::Muon> > mu_handle;
396     iEvent.getByLabel(muon_sources[j], mu_handle);
397     const std::vector<pat::Muon>& pat_muons = *(mu_handle.product());
398    
399     for (unsigned int i = 0; i <pat_muons.size() ; ++i) {
400     pat::Muon pat_mu = pat_muons[i];
401    
402     Muon mu;
403 peiffer 1.17 mu.set_charge( pat_mu.charge());
404     mu.set_pt( pat_mu.pt());
405     mu.set_eta( pat_mu.eta());
406     mu.set_phi( pat_mu.phi());
407     mu.set_energy( pat_mu.energy());
408     mu.set_vertex_x ( pat_mu.vertex().x());
409     mu.set_vertex_y ( pat_mu.vertex().y());
410     mu.set_vertex_z ( pat_mu.vertex().z());
411     mu.set_dB ( pat_mu.dB());
412     //mu.particleIso ( pat_mu.particleIso());
413     mu.set_neutralHadronIso ( pat_mu.neutralHadronIso());
414     mu.set_chargedHadronIso ( pat_mu.chargedHadronIso());
415     mu.set_trackIso ( pat_mu.trackIso());
416     mu.set_photonIso ( pat_mu.photonIso());
417     mu.set_puChargedHadronIso ( pat_mu.puChargedHadronIso());
418     mu.set_isGlobalMuon ( pat_mu.isGlobalMuon());
419     mu.set_isStandAloneMuon ( pat_mu.isStandAloneMuon());
420     mu.set_isTrackerMuon ( pat_mu.isTrackerMuon());
421     mu.set_numberOfMatchedStations ( pat_mu.numberOfMatchedStations());
422 peiffer 1.1 reco::TrackRef globalTrack = pat_mu.globalTrack();
423     if(!globalTrack.isNull()){
424 peiffer 1.17 mu.set_globalTrack_chi2 ( globalTrack->chi2());
425     mu.set_globalTrack_ndof ( globalTrack->ndof());
426     mu.set_globalTrack_d0 ( globalTrack->d0());
427     mu.set_globalTrack_d0Error ( globalTrack->d0Error());
428     mu.set_globalTrack_numberOfValidHits ( globalTrack->numberOfValidHits());
429     mu.set_globalTrack_numberOfLostHits ( globalTrack->numberOfLostHits());
430 peiffer 1.1 }
431     else{
432 peiffer 1.17 mu.set_globalTrack_chi2 ( 0);
433     mu.set_globalTrack_ndof ( 0);
434     mu.set_globalTrack_d0 ( 0);
435     mu.set_globalTrack_d0Error ( 0);
436     mu.set_globalTrack_numberOfValidHits ( 0);
437     mu.set_globalTrack_numberOfLostHits ( 0);
438 peiffer 1.1 }
439     reco::TrackRef innerTrack = pat_mu.innerTrack();
440     if(!innerTrack.isNull()){
441 peiffer 1.17 mu.set_innerTrack_chi2 ( innerTrack->chi2());
442     mu.set_innerTrack_ndof ( innerTrack->ndof());
443     mu.set_innerTrack_d0 ( innerTrack->d0());
444     mu.set_innerTrack_d0Error ( innerTrack->d0Error());
445     mu.set_innerTrack_numberOfValidHits ( innerTrack->numberOfValidHits());
446     mu.set_innerTrack_numberOfLostHits ( innerTrack->numberOfLostHits());
447     mu.set_innerTrack_trackerLayersWithMeasurement ( innerTrack->hitPattern().trackerLayersWithMeasurement());
448     mu.set_innerTrack_numberOfValidPixelHits ( innerTrack->hitPattern().numberOfValidPixelHits());
449 peiffer 1.1 }
450     else{
451 peiffer 1.17 mu.set_innerTrack_chi2 ( 0);
452     mu.set_innerTrack_ndof ( 0);
453     mu.set_innerTrack_d0 ( 0);
454     mu.set_innerTrack_d0Error ( 0);
455     mu.set_innerTrack_numberOfValidHits ( 0);
456     mu.set_innerTrack_numberOfLostHits ( 0);
457     mu.set_innerTrack_trackerLayersWithMeasurement ( 0);
458     mu.set_innerTrack_numberOfValidPixelHits ( 0);
459 peiffer 1.1 }
460     reco::TrackRef outerTrack = pat_mu.outerTrack();
461     if(!outerTrack.isNull()){
462 peiffer 1.17 mu.set_outerTrack_chi2 ( outerTrack->chi2());
463     mu.set_outerTrack_ndof ( outerTrack->ndof());
464     mu.set_outerTrack_d0 ( outerTrack->d0());
465     mu.set_outerTrack_d0Error ( outerTrack->d0Error());
466     mu.set_outerTrack_numberOfValidHits ( outerTrack->numberOfValidHits());
467     mu.set_outerTrack_numberOfLostHits ( outerTrack->numberOfLostHits());
468 peiffer 1.1 }
469     else{
470 peiffer 1.17 mu.set_outerTrack_chi2 ( 0);
471     mu.set_outerTrack_ndof ( 0);
472     mu.set_outerTrack_d0 ( 0);
473     mu.set_outerTrack_d0Error ( 0);
474     mu.set_outerTrack_numberOfValidHits ( 0);
475     mu.set_outerTrack_numberOfLostHits ( 0);
476 peiffer 1.1 }
477    
478     mus[j].push_back(mu);
479     }
480     }
481     }
482     // ------------- taus -------------
483    
484     if(doTaus){
485     for(size_t j=0; j< tau_sources.size(); ++j){
486     taus[j].clear();
487    
488    
489     edm::Handle< std::vector<pat::Tau> > tau_handle;
490     iEvent.getByLabel(tau_sources[j], tau_handle);
491     const std::vector<pat::Tau>& pat_taus = *(tau_handle.product());
492    
493     for (unsigned int i = 0; i < pat_taus.size(); ++i) {
494     pat::Tau pat_tau = pat_taus[i];
495     if(pat_tau.pt() < tau_ptmin) continue;
496     if(fabs(pat_tau.eta()) > tau_etamax) continue;
497    
498     Tau tau;
499 peiffer 1.17 tau.set_charge( pat_tau.charge());
500     tau.set_pt( pat_tau.pt());
501     tau.set_eta( pat_tau.eta());
502     tau.set_phi( pat_tau.phi());
503     tau.set_energy( pat_tau.energy());
504     tau.set_decayModeFinding ( pat_tau.tauID("decayModeFinding")>0.5);
505     tau.set_byVLooseCombinedIsolationDeltaBetaCorr ( pat_tau.tauID("byVLooseCombinedIsolationDeltaBetaCorr")>0.5);
506     tau.set_byLooseCombinedIsolationDeltaBetaCorr ( pat_tau.tauID("byLooseCombinedIsolationDeltaBetaCorr")>0.5);
507     tau.set_byMediumCombinedIsolationDeltaBetaCorr ( pat_tau.tauID("byMediumCombinedIsolationDeltaBetaCorr")>0.5);
508     tau.set_byTightCombinedIsolationDeltaBetaCorr ( pat_tau.tauID("byTightCombinedIsolationDeltaBetaCorr")>0.5);
509     tau.set_againstElectronLoose ( pat_tau.tauID("againstElectronLoose")>0.5);
510     tau.set_againstElectronMedium ( pat_tau.tauID("againstElectronMedium")>0.5);
511     tau.set_againstElectronTight ( pat_tau.tauID("againstElectronTight")>0.5);
512     tau.set_againstElectronMVA ( pat_tau.tauID("againstElectronMVA")>0.5);
513     tau.set_againstMuonLoose ( pat_tau.tauID("againstMuonLoose")>0.5);
514     tau.set_againstMuonMedium ( pat_tau.tauID("againstMuonMedium")>0.5);
515     tau.set_againstMuonTight ( pat_tau.tauID("againstMuonTight")>0.5);
516 peiffer 1.10
517     reco::PFCandidateRef leadPFCand = pat_tau.leadPFCand();
518     if(!leadPFCand.isNull()){
519 peiffer 1.17 tau.set_leadPFCand_px ( leadPFCand->px());
520     tau.set_leadPFCand_py ( leadPFCand->py());
521     tau.set_leadPFCand_pz ( leadPFCand->pz());
522 peiffer 1.10 }
523     else{
524 peiffer 1.17 tau.set_leadPFCand_px ( 0);
525     tau.set_leadPFCand_py ( 0);
526     tau.set_leadPFCand_pz ( 0);
527 peiffer 1.10 }
528 peiffer 1.1 taus[j].push_back(tau);
529     }
530     }
531     }
532    
533     // ------------- jets -------------
534     if(doJets){
535     for(size_t j=0; j< jet_sources.size(); ++j){
536    
537     jets[j].clear();
538    
539     edm::Handle< std::vector<pat::Jet> > jet_handle;
540     iEvent.getByLabel(jet_sources[j], jet_handle);
541     const std::vector<pat::Jet>& pat_jets = *(jet_handle.product());
542    
543     for (unsigned int i = 0; i < pat_jets.size(); ++i) {
544     pat::Jet pat_jet = pat_jets[i];
545     if(pat_jet.pt() < jet_ptmin) continue;
546     if(fabs(pat_jet.eta()) > jet_etamax) continue;
547     // std::cout << "available btag discriminators: " << std::endl;
548     // const std::vector<std::pair<std::string, float> > & dis = pat_jets[i].getPairDiscri();
549     // for(size_t k=0; k<dis.size(); ++k){
550     // std::cout << dis[k].first << std::endl;
551     // }
552    
553     Jet jet;
554 peiffer 1.17 jet.set_charge(pat_jet.charge());
555     jet.set_pt(pat_jet.pt());
556     jet.set_eta(pat_jet.eta());
557     jet.set_phi(pat_jet.phi());
558     jet.set_energy(pat_jet.energy());
559     jet.set_numberOfDaughters (pat_jet.numberOfDaughters());
560 peiffer 1.1 const reco::TrackRefVector& jettracks = pat_jet.associatedTracks();
561 peiffer 1.17 jet.set_nTracks ( jettracks.size());
562     jet.set_jetArea(pat_jet.jetArea());
563     jet.set_pileup(pat_jet.pileup());
564 peiffer 1.1 if(pat_jet.isPFJet()){
565 peiffer 1.17 jet.set_neutralEmEnergyFraction (pat_jet.neutralEmEnergyFraction());
566     jet.set_neutralHadronEnergyFraction (pat_jet.neutralHadronEnergyFraction());
567     jet.set_chargedEmEnergyFraction (pat_jet.chargedEmEnergyFraction());
568     jet.set_chargedHadronEnergyFraction (pat_jet.chargedHadronEnergyFraction());
569     jet.set_muonEnergyFraction (pat_jet.muonEnergyFraction());
570     jet.set_photonEnergyFraction (pat_jet.photonEnergyFraction());
571     jet.set_chargedMultiplicity (pat_jet.chargedMultiplicity());
572     jet.set_neutralMultiplicity (pat_jet.neutralMultiplicity());
573     jet.set_muonMultiplicity (pat_jet.muonMultiplicity());
574     jet.set_electronMultiplicity (pat_jet.electronMultiplicity());
575     jet.set_photonMultiplicity (pat_jet.photonMultiplicity());
576 peiffer 1.1 }
577 peiffer 1.5
578     jecUnc->setJetEta(pat_jet.eta());
579     jecUnc->setJetPt(pat_jet.pt());
580 peiffer 1.17 jet.set_JEC_uncertainty(jecUnc->getUncertainty(true));
581     jet.set_JEC_factor_raw(pat_jet.jecFactor("Uncorrected"));
582 peiffer 1.5
583 peiffer 1.17 jet.set_btag_simpleSecondaryVertexHighEff(pat_jet.bDiscriminator("simpleSecondaryVertexHighEffBJetTags"));
584     jet.set_btag_simpleSecondaryVertexHighPur(pat_jet.bDiscriminator("simpleSecondaryVertexHighPurBJetTags"));
585     jet.set_btag_combinedSecondaryVertex(pat_jet.bDiscriminator("combinedSecondaryVertexBJetTags"));
586     jet.set_btag_combinedSecondaryVertexMVA(pat_jet.bDiscriminator("combinedSecondaryVertexMVABJetTags"));
587     jet.set_btag_jetBProbability(pat_jet.bDiscriminator("jetBProbabilityBJetTags"));
588     jet.set_btag_jetProbability(pat_jet.bDiscriminator("jetProbabilityBJetTags"));
589 peiffer 1.1
590 peiffer 1.12 const reco::GenJet *genj = pat_jet.genJet();
591     if(genj){
592 peiffer 1.17 jet.set_genjet_pt(genj->pt());
593     jet.set_genjet_eta(genj->eta());
594     jet.set_genjet_phi(genj->phi());
595     jet.set_genjet_energy(genj->energy());
596 peiffer 1.15 if(doAllGenParticles){
597     std::vector<const reco::GenParticle * > jetgenps = genj->getGenConstituents();
598     for(unsigned int l = 0; l<jetgenps.size(); ++l){
599     for(unsigned int k=0; k< genps.size(); ++k){
600 peiffer 1.17 if(jetgenps[l]->pt() == genps[k].pt() && jetgenps[l]->pdgId() == genps[k].pdgId()){
601     jet.add_genparticles_index(genps[k].index());
602     break;
603 peiffer 1.15 }
604     }
605     }
606 peiffer 1.17 if(jet.genparticles_indices().size()!= jetgenps.size())
607     std::cout << "WARNING: Found only " << jet.genparticles_indices().size() << " from " << jetgenps.size() << " gen particles of this jet"<<std::endl;
608 peiffer 1.15 }
609 peiffer 1.12 }
610 peiffer 1.1 jets[j].push_back(jet);
611     }
612     }
613     }
614    
615     // ------------- top jets -------------
616     if(doTopJets){
617     for(size_t j=0; j< topjet_sources.size(); ++j){
618    
619     topjets[j].clear();
620    
621     edm::Handle<pat::JetCollection> pat_topjets;
622     //edm::Handle<std::vector<reco::Jet> > pat_topjets;
623     iEvent.getByLabel(topjet_sources[j], pat_topjets);
624    
625     for (unsigned int i = 0; i < pat_topjets->size(); i++) {
626 peiffer 1.14
627 peiffer 1.1 const pat::Jet pat_topjet = * dynamic_cast<pat::Jet const *>(&pat_topjets->at(i));
628     if(pat_topjet.pt() < topjet_ptmin) continue;
629     if(fabs(pat_topjet.eta()) > topjet_etamax) continue;
630    
631     TopJet topjet;
632 peiffer 1.17 topjet.set_charge(pat_topjet.charge());
633     topjet.set_pt(pat_topjet.pt());
634     topjet.set_eta(pat_topjet.eta());
635     topjet.set_phi(pat_topjet.phi());
636     topjet.set_energy(pat_topjet.energy());
637     topjet.set_numberOfDaughters(pat_topjet.numberOfDaughters());
638 peiffer 1.1 const reco::TrackRefVector& topjettracks = pat_topjet.associatedTracks();
639 peiffer 1.17 topjet.set_nTracks( topjettracks.size());
640     topjet.set_jetArea( pat_topjet.jetArea());
641     topjet.set_pileup( pat_topjet.pileup());
642     // topjet.set_neutralEmEnergyFraction(pat_topjet.neutralEmEnergyFraction());
643     // topjet.set_neutralHadronEnergyFraction(pat_topjet.neutralHadronEnergyFraction());
644     // topjet.set_chargedEmEnergyFraction(pat_topjet.chargedEmEnergyFraction());
645     // topjet.set_chargedHadronEnergyFraction(pat_topjet.chargedHadronEnergyFraction());
646     // topjet.set_muonEnergyFraction(pat_topjet.muonEnergyFraction());
647     // topjet.set_photonEnergyFraction(pat_topjet.photonEnergyFraction());
648     // topjet.set_chargedMultiplicity(pat_topjet.chargedMultiplicity());
649     // topjet.set_neutralMultiplicity(pat_topjet.neutralMultiplicity());
650     // topjet.set_muonMultiplicity(pat_topjet.muonMultiplicity());
651     // topjet.set_electronMultiplicity(pat_topjet.electronMultiplicity());
652     // topjet.set_photonMultiplicity(pat_topjet.photonMultiplicity());
653 peiffer 1.1
654 peiffer 1.5 jecUnc->setJetEta(pat_topjet.eta());
655     jecUnc->setJetPt(pat_topjet.pt());
656 peiffer 1.17 topjet.set_JEC_uncertainty( jecUnc->getUncertainty(true));
657     topjet.set_JEC_factor_raw( pat_topjet.jecFactor("Uncorrected"));
658 peiffer 1.5
659 peiffer 1.17 topjet.set_btag_simpleSecondaryVertexHighEff(pat_topjet.bDiscriminator("simpleSecondaryVertexHighEffBJetTags"));
660     topjet.set_btag_simpleSecondaryVertexHighPur(pat_topjet.bDiscriminator("simpleSecondaryVertexHighPurBJetTags"));
661     topjet.set_btag_combinedSecondaryVertex(pat_topjet.bDiscriminator("combinedSecondaryVertexBJetTags"));
662     topjet.set_btag_combinedSecondaryVertexMVA(pat_topjet.bDiscriminator("combinedSecondaryVertexMVABJetTags"));
663     topjet.set_btag_jetBProbability(pat_topjet.bDiscriminator("jetBProbabilityBJetTags"));
664     topjet.set_btag_jetProbability(pat_topjet.bDiscriminator("jetProbabilityBJetTags"));
665 peiffer 1.1
666 peiffer 1.12 const reco::GenJet *genj = pat_topjet.genJet();
667     if(genj){
668 peiffer 1.17 topjet.set_genjet_pt ( genj->pt());
669     topjet.set_genjet_eta ( genj->eta());
670     topjet.set_genjet_phi ( genj->phi());
671     topjet.set_genjet_energy ( genj->energy());
672 peiffer 1.15 if(doAllGenParticles){
673     std::vector<const reco::GenParticle * > jetgenps = genj->getGenConstituents();
674     for(unsigned int l = 0; l<jetgenps.size(); ++l){
675     for(unsigned int k=0; k< genps.size(); ++k){
676 peiffer 1.17 if(jetgenps[l]->pt() == genps[k].pt() && jetgenps[l]->pdgId() == genps[k].pdgId()){
677     topjet.add_genparticles_index(genps[k].index());
678     break;
679 peiffer 1.15 }
680     }
681     }
682 peiffer 1.17 if(topjet.genparticles_indices().size()!= jetgenps.size())
683     std::cout << "WARNING: Found only " << topjet.genparticles_indices().size() << " from " << jetgenps.size() << " gen particles of this topjet"<<std::endl;
684 peiffer 1.15 }
685 peiffer 1.12 }
686    
687 peiffer 1.1 for (unsigned int k = 0; k < pat_topjet.numberOfDaughters(); k++) {
688     Particle subjet_v4;
689 peiffer 1.17 subjet_v4.set_pt(pat_topjet.daughter(k)->p4().pt());
690     subjet_v4.set_eta(pat_topjet.daughter(k)->p4().eta());
691     subjet_v4.set_phi(pat_topjet.daughter(k)->p4().phi());
692     subjet_v4.set_energy(pat_topjet.daughter(k)->p4().E());
693     topjet.add_subjet(subjet_v4);
694 peiffer 1.1 }
695     topjets[j].push_back(topjet);
696     }
697     }
698     }
699    
700 peiffer 1.14
701     // ------------- generator top jets -------------
702     if(doGenTopJets){
703     for(size_t j=0; j< gentopjet_sources.size(); ++j){
704    
705     gentopjets[j].clear();
706    
707     edm::Handle<reco::BasicJetCollection> reco_gentopjets;
708     //edm::Handle<std::vector<reco::Jet> > reco_gentopjets;
709     iEvent.getByLabel(gentopjet_sources[j], reco_gentopjets);
710    
711     for (unsigned int i = 0; i < reco_gentopjets->size(); i++) {
712    
713     const reco::BasicJet reco_gentopjet = reco_gentopjets->at(i);
714     if(reco_gentopjet.pt() < gentopjet_ptmin) continue;
715     if(fabs(reco_gentopjet.eta()) > gentopjet_etamax) continue;
716    
717     TopJet gentopjet;
718 peiffer 1.17 gentopjet.set_charge(reco_gentopjet.charge());
719     gentopjet.set_pt(reco_gentopjet.pt());
720     gentopjet.set_eta(reco_gentopjet.eta());
721     gentopjet.set_phi(reco_gentopjet.phi());
722     gentopjet.set_energy(reco_gentopjet.energy());
723     gentopjet.set_numberOfDaughters(reco_gentopjet.numberOfDaughters());
724 peiffer 1.14
725     for (unsigned int k = 0; k < reco_gentopjet.numberOfDaughters(); k++) {
726     Particle subjet_v4;
727 peiffer 1.17 subjet_v4.set_pt(reco_gentopjet.daughter(k)->p4().pt());
728     subjet_v4.set_eta(reco_gentopjet.daughter(k)->p4().eta());
729     subjet_v4.set_phi(reco_gentopjet.daughter(k)->p4().phi());
730     subjet_v4.set_energy(reco_gentopjet.daughter(k)->p4().E());
731     gentopjet.add_subjet(subjet_v4);
732 peiffer 1.14 }
733     gentopjets[j].push_back(gentopjet);
734     }
735     }
736     }
737    
738 peiffer 1.1 // ------------- photons -------------
739     if(doPhotons){
740     for(size_t j=0; j< photon_sources.size(); ++j){
741     phs[j].clear();
742    
743     edm::Handle< std::vector<pat::Photon> > photon_handle;
744     iEvent.getByLabel(photon_sources[j], photon_handle);
745     const std::vector<pat::Photon>& pat_photons = *(photon_handle.product());
746    
747     for (unsigned int i = 0; i < pat_photons.size(); ++i) {
748     pat::Photon pat_photon = pat_photons[i];
749     Photon ph;
750 peiffer 1.17 ph.set_charge(0);
751     ph.set_pt( pat_photon.pt());
752     ph.set_eta( pat_photon.eta());
753     ph.set_phi( pat_photon.phi());
754     ph.set_energy( pat_photon.energy());
755     ph.set_vertex_x(pat_photon.vertex().x());
756     ph.set_vertex_y(pat_photon.vertex().y());
757     ph.set_vertex_z(pat_photon.vertex().z());
758     ph.set_supercluster_eta(pat_photon.superCluster()->eta());
759     ph.set_supercluster_phi(pat_photon.superCluster()->phi());
760     // ph.set_neutralHadronIso(pat_photon.neutralHadronIso());
761     // ph.set_chargedHadronIso(pat_photon.chargedHadronIso());
762     ph.set_trackIso(pat_photon.trackIso());
763 peiffer 1.1 phs[j].push_back(ph);
764     }
765     }
766     }
767    
768     // ------------- MET -------------
769     if(doMET){
770     for(size_t j=0; j< met_sources.size(); ++j){
771    
772     edm::Handle< std::vector<pat::MET> > met_handle;
773     iEvent.getByLabel(met_sources[j], met_handle);
774     const std::vector<pat::MET>& pat_mets = *(met_handle.product());
775    
776     if(pat_mets.size()!=1){
777     std::cout<< "WARNING: number of METs = " << pat_mets.size() <<", should be 1" << std::endl;
778     }
779     else{
780     pat::MET pat_met = pat_mets[0];
781    
782 peiffer 1.17 met[j].set_pt(pat_met.pt());
783     met[j].set_phi(pat_met.phi());
784     met[j].set_mEtSig(pat_met.mEtSig());
785 peiffer 1.1 }
786    
787     }
788     }
789    
790     // ------------- trigger -------------
791 peiffer 1.6 if(doTrigger){
792     edm::InputTag triggerEvent = edm::InputTag("hltTriggerSummaryAOD");
793     edm::Handle< trigger::TriggerEvent > dummy_TriggerEvent;
794     iEvent.getByLabel( edm::InputTag(triggerEvent.label(), triggerEvent.instance()), dummy_TriggerEvent );
795    
796     const edm::Provenance *meta = dummy_TriggerEvent.provenance();
797     std::string nameProcess = meta->processName();
798     edm::InputTag triggerResultTag = edm::InputTag("TriggerResults");
799     triggerResultTag = edm::InputTag( triggerResultTag.label(), triggerResultTag.instance(), nameProcess );
800    
801     edm::Handle<edm::TriggerResults> trigger;
802     iEvent.getByLabel(triggerResultTag, trigger);
803     const edm::TriggerResults& trig = *(trigger.product());
804    
805     triggerResults.clear();
806     triggerNames.clear();
807 peiffer 1.16 // L1_prescale.clear();
808     // HLT_prescale.clear();
809 peiffer 1.6
810     edm::Service<edm::service::TriggerNamesService> tns;
811     std::vector<std::string> triggerNames_all;
812     tns->getTrigPaths(trig,triggerNames_all);
813    
814     if (trig.size()!=triggerNames_all.size()) std::cout <<"ERROR: length of names and paths not the same: "<<triggerNames_all.size()<<","<<trig.size()<< std::endl;
815     for(unsigned int i=0; i<trig.size(); ++i){
816     std::vector<std::string>::const_iterator it = trigger_prefixes.begin();
817     for(; it!=trigger_prefixes.end(); ++it){
818     if(triggerNames_all[i].substr(0, it->size()) == *it)break;
819     }
820     if(it==trigger_prefixes.end()) continue;
821    
822     //triggerResults.insert(std::pair<std::string, bool>(triggerNames[i],trig.accept(i)));
823     triggerResults.push_back(trig.accept(i));
824     if(newrun) triggerNames.push_back(triggerNames_all[i]);
825 peiffer 1.16 // if(isRealData){
826     // std::pair<int, int> pre=hlt_cfg.prescaleValues(iEvent, iSetup, triggerNames_all[i]);
827     // L1_prescale.push_back(pre.first);
828     // HLT_prescale.push_back(pre.second);
829     // //std::cout << triggerNames_all[i] << " " << pre.first << " " <<pre.second << " " << hlt_cfg.prescaleValue(iEvent, iSetup, triggerNames_all[i]) << std::endl;
830     // }
831 peiffer 1.6 }
832     // for(std::map<std::string, bool>::const_iterator iter = triggerResults.begin(); iter!=triggerResults.end(); iter++){
833     // std::cout << (*iter).first << " " << (*iter).second << std::endl;
834     // }
835     newrun=false;
836     }
837 peiffer 1.1
838    
839     tr->Fill();
840 peiffer 1.10 if(doLumiInfo)
841     previouslumiblockwasfilled=true;
842 peiffer 1.1 }
843    
844    
845     // ------------ method called once each job just before starting event loop ------------
846     void
847     NtupleWriter::beginJob()
848     {
849 peiffer 1.10 if(doLumiInfo){
850     totalRecLumi=0;
851     totalDelLumi=0;
852     previouslumiblockwasfilled=false;
853     }
854 peiffer 1.1 }
855    
856     // ------------ method called once each job just after ending the event loop ------------
857     void
858     NtupleWriter::endJob()
859     {
860     outfile->cd();
861     tr->Write();
862     outfile->Close();
863     }
864    
865     // ------------ method called when starting to processes a run ------------
866     void
867     NtupleWriter::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup)
868     {
869 peiffer 1.7 if(doTrigger){
870     bool setup_changed = false;
871     hlt_cfg.init(iRun, iSetup, "HLT", setup_changed);
872     newrun=true;
873     }
874 peiffer 1.5
875 peiffer 1.7 if(doJets || doTopJets){
876     edm::ESHandle<JetCorrectorParametersCollection> JetCorParColl;
877     iSetup.get<JetCorrectionsRecord>().get("AK5PF",JetCorParColl);
878     JetCorrectorParameters const & JetCorPar = (*JetCorParColl)["Uncertainty"];
879     jecUnc = new JetCorrectionUncertainty(JetCorPar);
880     }
881 peiffer 1.1 }
882    
883     // ------------ method called when ending the processing of a run ------------
884     void
885     NtupleWriter::endRun(edm::Run const&, edm::EventSetup const&)
886     {
887 peiffer 1.10 if(doLumiInfo)
888     std::cout << "total integ. luminosity: " << totalDelLumi <<"(del) " << totalRecLumi << "(rec)" << std::endl;
889 peiffer 1.1 }
890    
891     // ------------ method called when starting to processes a luminosity block ------------
892     void
893 peiffer 1.10 NtupleWriter::beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const&)
894 peiffer 1.1 {
895 peiffer 1.10 if(doLumiInfo){
896     edm::Handle<LumiSummary> l;
897     lumi.getByLabel("lumiProducer", l);
898    
899     //add lumi of lumi blocks without any event to next lumiblock
900     if(previouslumiblockwasfilled){
901     intgRecLumi=0;
902     intgDelLumi=0;
903     }
904     previouslumiblockwasfilled=false;
905    
906     if (l.isValid()){;
907     intgRecLumi+=l->intgRecLumi()*6.37;
908     intgDelLumi+=l->intgDelLumi()*6.37;
909     totalRecLumi+=l->intgRecLumi()*6.37;
910     totalDelLumi+=l->intgDelLumi()*6.37;
911     }
912     //std::cout << "this lb: " <<l->intgRecLumi()*6.37 <<" " << l->intgDelLumi()*6.37<<std::endl;
913     //std::cout << "summed: "<< intgRecLumi << " " << intgDelLumi << std::endl;
914     }
915 peiffer 1.1 }
916    
917     // ------------ method called when ending the processing of a luminosity block ------------
918     void
919     NtupleWriter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
920     {
921     }
922    
923     // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
924     void
925     NtupleWriter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
926     //The following says we do not know what parameters are allowed so do no validation
927     // Please change this to state exactly what you do use, even if it is no parameters
928     edm::ParameterSetDescription desc;
929     desc.setUnknown();
930     descriptions.addDefault(desc);
931     }
932    
933     //define this as a plug-in
934     DEFINE_FWK_MODULE(NtupleWriter);