ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/Demo/PATJetIDAnalyzer/src/PATJetIDAnalyzer.cc
Revision: 1.2
Committed: Mon Feb 25 17:52:29 2008 UTC (17 years, 2 months ago) by auterman
Content type: text/plain
Branch: MAIN
Changes since 1.1: +36 -10 lines
Log Message:
switched from AOD:CaloJets to PAT-Jets

File Contents

# User Rev Content
1 auterman 1.1 // -*- C++ -*-
2     //
3     // Package: PATJetIDAnalyzer
4     // Class: PATJetIDAnalyzer
5     //
6     /**\class PATJetIDAnalyzer PATJetIDAnalyzer.cc Demo/PATJetIDAnalyzer/src/PATJetIDAnalyzer.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14     // Original Author: Christian Autermann
15     // Created: Mon Feb 25 11:33:02 CET 2008
16 auterman 1.2 // $Id: PATJetIDAnalyzer.cc,v 1.1.1.1 2008/02/25 15:54:04 auterman Exp $
17 auterman 1.1 //
18     //
19    
20     //system includes
21     #include <fstream>
22     #include <iostream>
23     //framework includes
24     #include "FWCore/Utilities/interface/EDMException.h"
25     #include "FWCore/ServiceRegistry/interface/Service.h"
26     #include "PhysicsTools/UtilAlgos/interface/TFileService.h"
27     //root includes
28     #include "TH1F.h"
29     #include "TH2F.h"
30     #include "TString.h"
31     //User include files
32     #include "DataFormats/Math/interface/deltaR.h"
33     //AOD
34     #include "DataFormats/JetReco/interface/GenJet.h"
35     #include "DataFormats/JetReco/interface/GenJetfwd.h"
36     #include "DataFormats/JetReco/interface/CaloJetCollection.h"
37     #include "DataFormats/METReco/interface/CaloMETCollection.h"
38     #include "DataFormats/METReco/interface/GenMETCollection.h"
39     #include "DataFormats/HepMCCandidate/interface/GenParticleCandidate.h"
40     //PAT
41     #include "DataFormats/PatCandidates/interface/Jet.h"
42     #include "DataFormats/PatCandidates/interface/MET.h"
43    
44 auterman 1.2 #include "PhysicsTools/Utilities/interface/EtComparator.h"
45 auterman 1.1 #include "Demo/PATJetIDAnalyzer/interface/NameScheme.h"
46     #include "Demo/PATJetIDAnalyzer/interface/PATJetIDAnalyzer.h"
47    
48    
49    
50     //
51     // constructors and destructor
52     //
53     PATJetIDAnalyzer::PATJetIDAnalyzer(const edm::ParameterSet& iConfig) :
54 auterman 1.2 //_recJet ( iConfig.getParameter<edm::InputTag>( "recJet" ) ),
55     //_genJet ( iConfig.getParameter<edm::InputTag>( "genJet" ) ),
56     //_recMet ( iConfig.getParameter<edm::InputTag>( "recMet" ) ),
57     //_genMet ( iConfig.getParameter<edm::InputTag>( "genMet" ) ),
58     _patJet ( iConfig.getParameter<edm::InputTag>( "patJet" ) ),
59     _patMet ( iConfig.getParameter<edm::InputTag>( "patMet" ) ),
60 auterman 1.1 _hist ( iConfig.getParameter<std::string>( "hist" ) ),
61     _jetminpt( iConfig.getParameter<double>( "MinJetPt" ) ),
62     _jetmaxeta(iConfig.getParameter<double>( "MaxJetEta" ) )
63     {
64     //now do what ever initialization is needed
65    
66     }
67    
68    
69     PATJetIDAnalyzer::~PATJetIDAnalyzer()
70     {
71    
72     // do anything here that needs to be done at desctruction time
73     // (e.g. close files, deallocate resources etc.)
74    
75     }
76    
77    
78     //
79     // member functions
80     //
81    
82     // ------------ method called to for each event ------------
83     void
84     PATJetIDAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
85     {
86     using namespace edm;
87 auterman 1.2 using namespace reco;
88 auterman 1.1 using namespace std;
89 auterman 1.2 using namespace pat;
90 auterman 1.1
91 auterman 1.2 /*
92 auterman 1.1 //CaloJets
93     edm::Handle<reco::CaloJetCollection> CJets;
94     iEvent.getByLabel( _recJet, CJets );
95     reco::CaloJetCollection CaloJets = *CJets;
96     std::sort( CaloJets.begin(), CaloJets.end(), PtGreater());
97    
98     //GenJets
99     edm::Handle<reco::GenJetCollection> GJets;
100     iEvent.getByLabel( _genJet, GJets );
101     reco::GenJetCollection GenJets = *GJets;
102     std::sort( GenJets.begin(), GenJets.end(), PtGreater());
103    
104     // matching maps for GenJets and CaloJets and vice versa
105     // fills some histograms inside (dR vs. dE, rec. eff., gen. vs. matched ...)
106     makeMatchingMaps(GJets,CJets);
107 auterman 1.2 */
108     //PAT Jets
109     typedef vector<pat::Jet>::const_iterator PatJetCIter;
110     edm::Handle<vector<pat::Jet> > PatJets;
111     iEvent.getByLabel( _patJet, PatJets );
112     GreaterByEt<pat::Jet> eTComparator_;
113     vector<pat::Jet> patjets = *PatJets;
114     std::sort(patjets.begin(), patjets.end(), eTComparator_);
115     //std::sort( (*PatJets).begin(), (*PatJets).end(), eTComparator_);
116     PatJetCIter PatJetBegin = patjets.begin();
117     PatJetCIter PatJetEnd = patjets.end();
118 auterman 1.1
119 auterman 1.2 //Jets
120 auterman 1.1 unsigned multiplicity = 0;
121     double met=0.0, ht=0.0;
122 auterman 1.2 for (PatJetCIter it=PatJetBegin; it!=PatJetEnd; ++it) {
123 auterman 1.1 if (it->pt() > _jetminpt && fabs( it->eta() )<_jetmaxeta){
124     if (multiplicity<_njets ) {
125     _pt_jet[ multiplicity]->Fill( it->pt() );
126     _eta_jet[ multiplicity]->Fill( it->eta() );
127     _phi_jet[ multiplicity]->Fill( it->phi() );
128     _emfrac_jet[ multiplicity]->Fill( it->emEnergyFraction() );
129     _hadfrac_jet[multiplicity]->Fill( it->energyFractionHadronic() );
130     _n60_jet[ multiplicity]->Fill( it->n60() );
131     _n90_jet[ multiplicity]->Fill( it->n90() );
132     _area_jet[ multiplicity]->Fill( it->towersArea() );
133     }
134     ++multiplicity;
135     ht += it->pt();
136     }
137     }
138     _jetmult->Fill( multiplicity );
139     _ht->Fill( ht );
140    
141 auterman 1.2
142     /*
143     //PAT MET
144     typedef vector<PatMet>::const_iterator PatJetCIter;
145     edm::Handle<vector<PatJet> > PatJets;
146     iEvent.getByLabel( _patJet, PatJets );
147     std::sort( PatJets->begin(), PatJets->end(), PtGreater());
148     PatJetCIter PatJetBegin = PatJets->begin();
149     PatJetCIter PatJetEnd = PatJets->end();
150 auterman 1.1 //MET
151     edm::Handle<reco::CaloMETCollection> recMet;
152     iEvent.getByLabel(_recMet,recMet);
153    
154     for ( reco::CaloMETCollection::const_iterator it=recMet->begin();
155     it!=recMet->end(); ++it) {
156     met = it->pt();
157     _met->Fill( met );
158     _metx->Fill(met*sin(it->phi()));
159     _mety->Fill(met*cos(it->phi()));
160     break;
161     }
162     _metmult->Fill( recMet->size() );
163     _htmet->Fill( ht+met );
164     _metsig->Fill( met / (0.97*sqrt(ht)) );
165     if (multiplicity>1 ) {
166     _nv->Fill( (met*met-(CaloJets[0].pt()-CaloJets[1].pt())*(CaloJets[0].pt()-CaloJets[1].pt())) / (CaloJets[1].pt()*CaloJets[1].pt()) );
167     _nv2->Fill( (met*met-(CaloJets[0].pt()-CaloJets[1].pt())*(CaloJets[0].pt()-CaloJets[1].pt())) / (CaloJets[0].pt()*CaloJets[0].pt()) );
168     _dijet->Fill(sqrt(pow(CaloJets[0].energy()+CaloJets[1].energy(),2)
169     -(pow(CaloJets[0].px()+CaloJets[1].px(),2)
170     +pow(CaloJets[0].py()+CaloJets[1].py(),2)
171     +pow(CaloJets[0].pz()+CaloJets[1].pz(),2) ) ) );
172     }
173 auterman 1.2 */
174     /*
175 auterman 1.1 //GenJets
176     multiplicity = 0;
177     met=0.0;
178     ht=0.0;
179     for (reco::GenJetCollection::const_iterator it=GenJets.begin();
180     it!=GenJets.end(); ++it) {
181     if (it->pt() > _jetminpt && fabs( it->eta() )<_jetmaxeta) {
182     if (multiplicity<_ngenjets ) {
183     _pt_genjet[ multiplicity]->Fill( it->pt() );
184     _eta_genjet[ multiplicity]->Fill( it->eta() );
185     _phi_genjet[ multiplicity]->Fill( it->phi() );
186     _emfrac_genjet[ multiplicity]->Fill( it->emEnergy() / it->energy() );
187     _hadfrac_genjet[ multiplicity]->Fill( it->hadEnergy() / it->energy() );
188     _invisible_genjet[multiplicity]->Fill( it->invisibleEnergy() / it->energy() );
189     _aux_genjet[ multiplicity]->Fill( it->auxiliaryEnergy() / it->energy() );
190     }
191     ++multiplicity;
192     ht += it->pt();
193     }
194     }
195     _genjetmult->Fill( multiplicity );
196    
197     //GenMET
198     edm::Handle<reco::GenMETCollection> genMet;
199     iEvent.getByLabel(_genMet,genMet);
200    
201     for ( reco::GenMETCollection::const_iterator it=genMet->begin();
202     it!=genMet->end(); ++it) {
203     met = it->pt();
204     _genmet->Fill( met );
205     _genmetx->Fill(met*sin(it->phi()));
206     _genmety->Fill(met*cos(it->phi()));
207     break;
208     }
209     _genmetmult->Fill( recMet->size() );
210     _genht->Fill( ht );
211     _genhtmet->Fill( ht+met );
212     if (multiplicity>1 ) {
213     _gendijet->Fill(sqrt(pow(GenJets[0].energy()+GenJets[1].energy(),2)
214     -(pow(GenJets[0].px()+GenJets[1].px(),2)
215     +pow(GenJets[0].py()+GenJets[1].py(),2)
216     +pow(GenJets[0].pz()+GenJets[1].pz(),2) ) ) );
217     }
218 auterman 1.2 */
219 auterman 1.1 }
220    
221    
222     // ------------ method called once each job just before starting event loop ------------
223     void
224     PATJetIDAnalyzer::beginJob(const edm::EventSetup&)
225     {
226     if( _hist.empty() )
227     return;
228    
229     edm::Service<TFileService> fs;
230     if( !fs ){
231     throw edm::Exception( edm::errors::Configuration,
232     "TFile Service is not registered in cfg file" );
233     }
234    
235     NameScheme hsusy("hsusy");
236     ofstream hist(_hist.c_str(), std::ios::out);
237     //CaloJets
238     for (unsigned i=0; i<_njets; ++i) {
239     _pt_jet[i] = fs->make<TH1F>(hsusy.name(hist, "ptj", i ), hsusy.name("PtJet", i), 100, 0. , 1000.);
240     _eta_jet[i] = fs->make<TH1F>(hsusy.name(hist, "etaj", i ), hsusy.name("EtaJet", i), 100, -5. , 5.);
241     _phi_jet[i] = fs->make<TH1F>(hsusy.name(hist, "phij", i ), hsusy.name("PhiJet", i), 70, -3.5, 3.5);
242     _emfrac_jet[i] = fs->make<TH1F>(hsusy.name(hist, "emfj", i ), hsusy.name("EmfJet", i), 50, 0. , 2.);
243     _hadfrac_jet[i] = fs->make<TH1F>(hsusy.name(hist, "hadfj",i ), hsusy.name("HadfJet",i), 50, 0. , 2.);
244     _n60_jet[i] = fs->make<TH1F>(hsusy.name(hist, "n60j", i ), hsusy.name("n60Jet", i), 50, 0. , 50.);
245     _n90_jet[i] = fs->make<TH1F>(hsusy.name(hist, "n90j", i ), hsusy.name("n90Jet", i), 50, 0. , 50.);
246     _area_jet[i] = fs->make<TH1F>(hsusy.name(hist, "areaj",i ), hsusy.name("AreaJet",i), 50, 0. , 5.);
247     }
248     _jetmult = fs->make<TH1F>(hsusy.name(hist, "multj" ), hsusy.name("JetMultiplicity"), 21, -0.5, 20.5);
249     _ht = fs->make<TH1F>(hsusy.name(hist, "ht" ), hsusy.name("Ht"), 100, 0.0, 2000.);
250     _htmet = fs->make<TH1F>(hsusy.name(hist, "htmet" ), hsusy.name("HtMet"), 100, 0.0, 2000.);
251     _dijet = fs->make<TH1F>(hsusy.name(hist, "dijet" ), hsusy.name("DiJet"), 100, 0.0, 2000.);
252     //GenJets
253     for (unsigned i=0; i<_ngenjets; ++i) {
254     _pt_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "ptgj", i ), hsusy.name("PtGenJet", i), 100, 0. , 1000.);
255     _eta_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "etagj", i ), hsusy.name("EtaGenJet", i), 100, -5. , 5.);
256     _phi_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "phigj", i ), hsusy.name("PhiGenJet", i), 70, -3.5, 3.5);
257     _emfrac_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "emfgj", i ), hsusy.name("EmfGenJet", i), 50, 0. , 5.);
258     _hadfrac_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "hadfgj",i ), hsusy.name("HadfGenJet",i), 50, 0. , 5.);
259     _invisible_genjet[i]=fs->make<TH1F>(hsusy.name(hist, "invisgj",i), hsusy.name("InvisiblefGenJet", i), 50, 0.,5.);
260     _aux_genjet[i] = fs->make<TH1F>(hsusy.name(hist, "auxgj", i ), hsusy.name("AuxfGenJet", i), 50, 0. , 5.);
261     }
262     _genjetmult = fs->make<TH1F>(hsusy.name(hist, "multgj" ), hsusy.name("GenJetMultiplicity"), 21, -0.5, 20.5);
263     _genht = fs->make<TH1F>(hsusy.name(hist, "htgj" ), hsusy.name("GenHt"), 100, 0.0, 2000.);
264     _genhtmet = fs->make<TH1F>(hsusy.name(hist, "htmetgj"), hsusy.name("GenHtMet"), 100, 0.0, 2000.);
265     _gendijet = fs->make<TH1F>(hsusy.name(hist, "dijetgj"), hsusy.name("GenDiJet"), 100, 0.0, 2000.);
266     //MET
267     _met = fs->make<TH1F>(hsusy.name(hist, "met" ), hsusy.name("Met"), 100, 0.0, 1000.);
268     _metmult = fs->make<TH1F>(hsusy.name(hist, "metmult"),hsusy.name("MetMult"), 11, -0.5, 10.5);
269     _metx = fs->make<TH1F>(hsusy.name(hist, "metx" ), hsusy.name("MetX"), 100, -1000.0, 1000.);
270     _mety = fs->make<TH1F>(hsusy.name(hist, "mety" ), hsusy.name("MetY"), 100, -1000.0, 1000.);
271     _metsig = fs->make<TH1F>(hsusy.name(hist, "metsig"), hsusy.name("MetSig"), 100, 0.0, 100.);
272     //GenMET
273     _genmet = fs->make<TH1F>(hsusy.name(hist, "metgj" ), hsusy.name("GenMet"), 100, 0.0, 1000.);
274     _genmetmult = fs->make<TH1F>(hsusy.name(hist, "metmultgj"),hsusy.name("GenMetMult"), 11, -0.5, 10.5);
275     _genmetx = fs->make<TH1F>(hsusy.name(hist, "metxgj" ), hsusy.name("GenMetX"), 100, -1000.0, 1000.);
276     _genmety = fs->make<TH1F>(hsusy.name(hist, "metygj" ), hsusy.name("GenMetY"), 100, -1000.0, 1000.);
277     //other
278     _nv = fs->make<TH1F>(hsusy.name(hist, "nv" ), hsusy.name("NV"), 100, -5.0, 5.);
279     _nv2 = fs->make<TH1F>(hsusy.name(hist, "nv2" ), hsusy.name("NV2"), 100, -5.0, 5.);
280     //matching
281     _GenOnCalo_match = fs->make<TH2F>(hsusy.name(hist,"gencalo"), hsusy.name("GenOnCalo"), 60, 0., 3., 120, -1, 5.);
282     _CaloOnGen_match = fs->make<TH2F>(hsusy.name(hist,"calogen"), hsusy.name("CaloOnGen"), 60, 0., 3., 120, -1, 5.);
283     _GenVsMatched_pt = fs->make<TH2F>(hsusy.name(hist,"genmatched_pt"), hsusy.name("GenVsMatched_Pt") , 100, 0. , 2000. , 100, 0. , 2000.);
284     _GenVsMatched_eta = fs->make<TH2F>(hsusy.name(hist,"genmatched_eta"), hsusy.name("GenVsMatched_Eta"), 100, -5. , 5. , 100, -5. , 5.);
285     _GenVsMatched_phi = fs->make<TH2F>(hsusy.name(hist,"genmatched_phi"), hsusy.name("GenVsMatched_Phi"), 70, -3.5, 3.5, 70, -3.5, 3.5);
286     _RecoEff_pt = fs->make<TH1F>(hsusy.name(hist, "recoeffpt") , hsusy.name("RecoEff_Pt") , 100, 0. , 2000. );
287     _RecoEff_eta = fs->make<TH1F>(hsusy.name(hist, "recoeffeta"), hsusy.name("RecoEff_Eta"), 100, -5. , 5. );
288     _RecoEff_phi = fs->make<TH1F>(hsusy.name(hist, "recoeffphi"), hsusy.name("RecoEff_Phi"), 70, -3.5, 3.5);
289     //helper histograms
290     _RecoTot_pt = new TH1F("recototpt" , "RecoTot_Pt" , 100, 0. , 2000. );
291     _RecoTot_eta= new TH1F("recototeta", "RecoTot_Eta", 100, -5. , 5. );
292     _RecoTot_phi= new TH1F("recototphi", "RecoTot_Phi", 70, -3.5, 3.5);
293     }
294    
295     // ------------ method called once each job just after ending the event loop ------------
296     void
297     PATJetIDAnalyzer::endJob() {
298     _RecoTot_pt->Sumw2();
299     _RecoEff_pt->Sumw2();
300     _RecoEff_pt->Divide(_RecoTot_pt);
301     _RecoTot_eta->Sumw2();
302     _RecoEff_eta->Sumw2();
303     _RecoEff_eta->Divide(_RecoTot_eta);
304     _RecoTot_phi->Sumw2();
305     _RecoEff_phi->Sumw2();
306     _RecoEff_phi->Divide(_RecoTot_phi);
307     }
308    
309     // ------------ redo matching
310     void
311     PATJetIDAnalyzer::makeMatchingMaps(edm::Handle<reco::GenJetCollection> GenJets, edm::Handle<reco::CaloJetCollection> CaloJets)
312     {
313     MatchingMapGen.clear();
314     MatchingMapJet.clear();
315    
316     // Loop over generator Jets
317     for(reco::GenJetCollection::const_iterator genjet = GenJets->begin(); genjet!=GenJets->end(); ++genjet) {
318     const reco::CaloJet* jetbest=0;
319     const reco::CaloJet* jetmatched=0;
320     double minDelR= 0.3;
321     double minDelE=-1/4.;
322     double maxDelE= 3.0;
323     double mindE=999.;
324     double mindR=999.;
325     double delR;
326     double delE;
327     double E1=(*genjet).energy();
328     bool matched = false;
329     // Loop over Calo jets
330     for(reco::CaloJetCollection::const_iterator calojet = CaloJets->begin(); calojet!=CaloJets->end(); ++calojet){
331     double E2=(*calojet).energy();
332     delR=deltaR(*calojet,*genjet);
333     delE=(E2-E1)/E1;
334     // This is the matching condition
335     if(delR<minDelR && delE>minDelE && delE<maxDelE){
336     matched=true;
337     minDelR=delR;
338     jetmatched=&(*calojet);
339     }
340     if(delR<mindR){
341     mindR=delR;
342     mindE=delE;
343     jetbest=&(*calojet);
344     }
345     }
346     if (matched) {
347     MatchingMapGen.insert(make_pair(&(*genjet),&(*jetmatched)));
348     _GenVsMatched_pt->Fill((*genjet).pt(),(*jetmatched).pt());
349     _GenVsMatched_eta->Fill((*genjet).eta(),(*jetmatched).eta());
350     _GenVsMatched_phi->Fill((*genjet).phi(),(*jetmatched).phi());
351     _RecoEff_pt->Fill((*genjet).pt());
352     _RecoEff_eta->Fill((*genjet).eta());
353     _RecoEff_phi->Fill((*genjet).phi());
354     }
355     _RecoTot_pt->Fill((*genjet).pt());
356     _RecoTot_eta->Fill((*genjet).eta());
357     _RecoTot_phi->Fill((*genjet).phi());
358     _GenOnCalo_match->Fill(mindR,mindE);
359     }
360    
361     // Loop over Calo Jets
362     for(reco::CaloJetCollection::const_iterator calojet = CaloJets->begin(); calojet!=CaloJets->end(); ++calojet) {
363     const reco::GenJet* jetbest=0;
364     const reco::GenJet* jetmatched=0;
365     double minDelR= 0.3;
366     double minDelE=-1/4.;
367     double maxDelE= 3.0;
368     double mindE=999.;
369     double mindR=999.;
370     double delR;
371     double delE;
372     double E1=(*calojet).energy();
373     bool matched = false;
374     // Loop over jets
375     for(reco::GenJetCollection::const_iterator genjet = GenJets->begin(); genjet!=GenJets->end(); ++genjet){
376     double E2=(*genjet).energy();
377     delR=deltaR(*genjet,*calojet);
378     delE=(E2-E1)/E1;
379     // This is the matching condition
380     if(delR<minDelR && delE>minDelE && delE<maxDelE){
381     matched=true;
382     minDelR=delR;
383     jetmatched=&(*genjet);
384     }
385     if(delR<mindR){
386     mindR=delR;
387     mindE=delE;
388     jetbest=&(*genjet);
389     }
390     }
391     if (matched) {
392     MatchingMapJet.insert(make_pair(&(*calojet),&(*jetmatched)));
393     }
394     _CaloOnGen_match->Fill(mindR,mindE);
395     }
396    
397     }
398    
399     //define this as a plug-in
400     DEFINE_FWK_MODULE(PATJetIDAnalyzer);