ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/CmsHi/JetAnalysis/src/HiGenJetCleaner.cc
Revision: 1.1
Committed: Tue Jul 21 14:43:46 2009 UTC (15 years, 9 months ago) by yilmaz
Content type: text/plain
Branch: MAIN
Log Message:
GenJet cleaner for matching

File Contents

# User Rev Content
1 yilmaz 1.1 // -*- C++ -*-
2     //
3     // Package: HiGenJetCleaner
4     // Class: HiGenJetCleaner
5     //
6     /**\class HiGenJetCleaner HiGenJetCleaner.cc yetkin/HiGenJetCleaner/src/HiGenJetCleaner.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14     // Original Author: Yetkin Yilmaz
15     // Created: Tue Jul 21 04:26:01 EDT 2009
16     // $Id$
17     //
18     //
19    
20    
21     // system include files
22     #include <memory>
23     #include <vector>
24    
25     // user include files
26     #include "FWCore/Framework/interface/Frameworkfwd.h"
27     #include "FWCore/Framework/interface/EDProducer.h"
28    
29     #include "FWCore/Framework/interface/Event.h"
30     #include "FWCore/Framework/interface/MakerMacros.h"
31    
32     #include "FWCore/ParameterSet/interface/ParameterSet.h"
33    
34     #include "DataFormats/JetReco/interface/GenJetCollection.h"
35     #include "DataFormats/GeometryVector/interface/VectorUtil.h"
36    
37     using namespace std;
38     using namespace edm;
39    
40    
41     //
42     // class decleration
43     //
44    
45     class HiGenJetCleaner : public edm::EDProducer {
46     public:
47     explicit HiGenJetCleaner(const edm::ParameterSet&);
48     ~HiGenJetCleaner();
49    
50     private:
51     virtual void beginJob() ;
52     virtual void produce(edm::Event&, const edm::EventSetup&);
53     virtual void endJob() ;
54    
55     // ----------member data ---------------------------
56    
57     string jetSrc_;
58     double deltaR_;
59     bool makeNew_;
60    
61     };
62    
63     //
64     // constants, enums and typedefs
65     //
66    
67    
68     //
69     // static data member definitions
70     //
71    
72     //
73     // constructors and destructor
74     //
75    
76     HiGenJetCleaner::HiGenJetCleaner(const edm::ParameterSet& iConfig) :
77     jetSrc_(iConfig.getUntrackedParameter<string>( "src","iterativeCone5HiGenJets")),
78     deltaR_(iConfig.getUntrackedParameter<double>("deltaR",0.125)),
79     makeNew_(iConfig.getUntrackedParameter<bool>("createNewCollection",false))
80    
81     {
82     std::string alias = jetSrc_;
83    
84     if(makeNew_)
85     produces<reco::GenJetCollection>().setBranchAlias (alias);
86     else
87     produces<reco::GenJetRefVector>().setBranchAlias (alias);
88     }
89    
90    
91     HiGenJetCleaner::~HiGenJetCleaner()
92     {
93    
94     // do anything here that needs to be done at desctruction time
95     // (e.g. close files, deallocate resources etc.)
96    
97     }
98    
99    
100     //
101     // member functions
102     //
103    
104     // ------------ method called to produce the data ------------
105     void
106     HiGenJetCleaner::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
107     {
108     using namespace edm;
109     using namespace reco;
110    
111     auto_ptr<GenJetCollection> jets;
112     auto_ptr<GenJetRefVector> jetrefs;
113    
114     if(makeNew_)
115     jets = auto_ptr<GenJetCollection>(new GenJetCollection);
116     else
117     jetrefs = auto_ptr<GenJetRefVector>(new GenJetRefVector);
118    
119     edm::Handle<reco::GenJetCollection> genjets;
120     iEvent.getByLabel(jetSrc_,genjets);
121    
122     int jetsize = genjets->size();
123    
124     vector<int> selection;
125     for(int ijet = 0; ijet < jetsize; ++ijet){
126     selection.push_back(-1);
127     }
128    
129     vector<int> selectedIndices;
130     vector<int> removedIndices;
131    
132     for(int ijet = 0; ijet < jetsize; ++ijet){
133    
134     const reco::GenJet* jet1 = &((*genjets)[ijet]);
135    
136     for(int ijet2 = 0; ijet2 < jetsize; ++ijet2){
137    
138     const reco::GenJet* jet2 = &((*genjets)[ijet2]);
139    
140     if(Geom::deltaR(jet1->momentum(),jet2->momentum()) < deltaR_){
141     if(jet1->et() < jet2->et()){
142     selection[ijet] = 0;
143     removedIndices.push_back(ijet);
144     break;
145     }else{
146     selection[ijet2] = 0;
147     removedIndices.push_back(ijet2);
148     }
149     }
150     }
151    
152     selection[ijet] = 1;
153     selectedIndices.push_back(ijet);
154    
155     GenJetRef ref(genjets,ijet);
156    
157     if(makeNew_)
158     jets->push_back(*jet1);
159     else
160     jetrefs->push_back(ref);
161    
162     }
163    
164     /*
165    
166     for(int ijet = 0; ijet < jetsize; ++ijet){
167    
168     // jets->push_back();
169    
170     }
171    
172     */
173    
174     if(makeNew_)
175     iEvent.put(jets);
176     else
177     iEvent.put(jetrefs);
178    
179    
180     }
181    
182     // ------------ method called once each job just before starting event loop ------------
183     void
184     HiGenJetCleaner::beginJob()
185     {
186     }
187    
188     // ------------ method called once each job just after ending the event loop ------------
189     void
190     HiGenJetCleaner::endJob() {
191     }
192    
193     //define this as a plug-in
194     DEFINE_FWK_MODULE(HiGenJetCleaner);