ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/algomez/GenAnalyzer/src/GenAnalyzer.cc
Revision: 1.2
Committed: Wed Jun 19 02:42:01 2013 UTC (11 years, 10 months ago) by algomez
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +54 -34 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 algomez 1.1 // -*- C++ -*-
2     //
3     // Package: GenAnalyzer
4     // Class: GenAnalyzer
5     //
6     /**\class GenAnalyzer GenAnalyzer.cc UserCode/GenAnalyzer/src/GenAnalyzer.cc
7    
8     Description: [one line class summary]
9    
10     Implementation:
11     [Notes on implementation]
12     */
13     //
14     // Original Author: Alejandro Gomez
15     // Created: Mon May 20 14:38:03 CDT 2013
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/EDAnalyzer.h"
28    
29     #include "FWCore/Framework/interface/Event.h"
30     #include "FWCore/Framework/interface/MakerMacros.h"
31     #include "DataFormats/FWLite/interface/Handle.h"
32    
33     #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
34     #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
35    
36     #include "DataFormats/Candidate/interface/Candidate.h"
37     #include "DataFormats/Candidate/interface/CandidateFwd.h"
38     #include "DataFormats/Common/interface/Ref.h"
39    
40     #include "FWCore/ServiceRegistry/interface/Service.h"
41     #include "CommonTools/UtilAlgos/interface/TFileService.h"
42    
43     #include "FWCore/Utilities/interface/InputTag.h"
44     #include "FWCore/ParameterSet/interface/ParameterSet.h"
45     #include "DataFormats/Math/interface/LorentzVector.h"
46     #include "DataFormats/Math/interface/Vector3D.h"
47    
48     #include "TLorentzVector.h"
49     #include "TVector3.h"
50     #include "TH1D.h"
51     //
52     // class declaration
53     //
54    
55     class GenAnalyzer : public edm::EDAnalyzer {
56     public:
57     explicit GenAnalyzer(const edm::ParameterSet&);
58     ~GenAnalyzer();
59    
60    
61     private:
62     virtual void beginJob() ;
63     virtual void analyze(const edm::Event&, const edm::EventSetup&);
64     virtual void endJob() ;
65    
66     // ----------member data ---------------------------
67     edm::InputTag src_;
68     double stop1Mass_;
69     double stop2Mass_;
70 algomez 1.2 double st1decay_;
71 algomez 1.1
72     TH1D * histo;
73     // Higgs
74     TH1D * h_higgs_mass;
75     TH1D * h_higgsTrue_mass;
76     TH1D * h_higgs_pt;
77     TH1D * h_higgsBB_deltaR;
78     TH1D * h_higgs_num;
79    
80     // Stop1
81     TH1D * h_stop1_mass;
82     TH1D * h_stop1True_mass;
83     TH1D * h_stop1_pt;
84     TH1D * h_stop1Bj_deltaR;
85    
86     // Stop2
87     TH1D * h_stop2_mass;
88     TH1D * h_stop2True_mass;
89    
90     // Jets + B
91     TH1D * h_jetsB_ht;
92     TH1D * h_jetsB_pt;
93     TH1D * h_jetsB1_pt;
94     TH1D * h_jetsB2_pt;
95     TH1D * h_jetsB3_pt;
96     TH1D * h_jetsB4_pt;
97     TH1D * h_jetsB_num;
98     TH1D * h_jetsB1_eta;
99     TH1D * h_jetsB2_eta;
100     TH1D * h_jetsB3_eta;
101     TH1D * h_jetsB4_eta;
102     TH1D * h_jetsB1_phi;
103     TH1D * h_jetsB2_phi;
104     TH1D * h_jetsB3_phi;
105     TH1D * h_jetsB4_phi;
106     TH1D * h_jetsB1jetsB2_deltaR;
107     TH1D * h_jetsB1jetsB3_deltaR;
108    
109     // Bjets
110     TH1D * h_Bjet1_pt;
111     TH1D * h_Bjet2_pt;
112     TH1D * h_Bjet_num;
113     TH1D * h_Bjet1Bjet2_deltaEta;
114     TH1D * h_Bjet1Bjet2_deltaPhi;
115     TH1D * h_Bjet1Bjet2_cosDeltaPhi;
116     TH1D * h_Bjet1Bjet2_deltaR;
117    
118     // Jets (without b)
119     TH1D * h_jet_pt;
120     TH1D * h_jet1_pt;
121     TH1D * h_jet2_pt;
122     TH1D * h_jet_num;
123    
124     // Fancy stuff
125     TH1D * h_jet1Bjet1_eta;
126     TH1D * h_jetfromStop1;
127     TH1D * h_BjetfromStop1;
128     TH1D * h_Bjet1fromStop1;
129     TH1D * h_Bjet2fromStop1;
130     TH1D * h_jetsBfromStop1;
131     TH1D * h_jetsB1fromStop1;
132     TH1D * h_jetsB2fromStop1;
133     TH1D * h_jetsB3fromStop1;
134     TH1D * h_jetsB4fromStop1;
135    
136     };
137    
138     //
139     // constants, enums and typedefs
140     //
141    
142     //
143     // static data member definitions
144     //
145    
146     //
147     // constructors and destructor
148     //
149     GenAnalyzer::GenAnalyzer(const edm::ParameterSet& iConfig) :
150     src_( iConfig.getParameter<edm::InputTag>( "src" ) ), // Obtain inputs
151     stop1Mass_( iConfig.getParameter<double>( "stop1Mass" ) ),
152 algomez 1.2 stop2Mass_( iConfig.getParameter<double>( "stop2Mass" ) ),
153     st1decay_( iConfig.getParameter<double>( "st1decay" ) )
154 algomez 1.1 {
155     //now do what ever initialization is needed
156     edm::Service<TFileService> fs; // Output File
157    
158     // Initialize Histograms
159     histo = fs->make<TH1D>("jetpt" , "Jet p_{T}" , 30 ,0., 300. ); // test histo
160    
161     // Higgs
162     h_higgs_mass = fs->make<TH1D>("higgs_mass" , "Higgs Mass" , 12.5 , 99.0, 150. );
163     h_higgsTrue_mass = fs->make<TH1D>("higgsTrue_mass" , "True Higgs Mass" , 12.5, 99., 150. );
164     h_higgs_pt = fs->make<TH1D>("higgs_pt" , "Higgs p_{T}" , 98 , 0., 500. );
165     //h_higgsBB_deltaR = fs->make<TH1D>("higgs_deltaR" , "#Delta R (b,b) [from H]" , 50 , 0., 5. );
166     h_higgs_num = fs->make<TH1D>("higgs_num" , "Number of Higgs" , 10 , -0.5, 9.5 );
167    
168     // Stop1
169     h_stop1_mass = fs->make<TH1D>("stop1_mass" , "Stop1 Mass" , 41 , 70., 530. );
170     h_stop1True_mass = fs->make<TH1D>("stop1True_mass" , "True Stop1 Mass" , 41 , 70, 530. );
171     h_stop1_pt = fs->make<TH1D>("stop1_pt" , "Stop1 p_{T}" , 98 , 0., 500. );
172     //h_stop1Bj_deltaR = fs->make<TH1D>("stop1Bj_deltaR" , "#Delta R (b,j) [from Stop1]" , 50 , 0., 5. );
173    
174     // Stop2
175     h_stop2_mass = fs->make<TH1D>("stop2_mass" , "Stop2 Mass" , 31 , 220., 780. );
176     h_stop2True_mass = fs->make<TH1D>("stop2True_mass" , "True Stop2 Mass" , 31 , 220., 780. );
177    
178     // Jets + B
179     h_jetsB_ht = fs->make<TH1D>("jetsB_ht" , "H_{T} (Jets + B)" , 40 , 200., 1000. );
180     h_jetsB_pt = fs->make<TH1D>("jetsB_pt" , "Jets + B p_{T}" , 98 , 0., 500. );
181     h_jetsB1_pt = fs->make<TH1D>("jetsB1_pt" , "Leading Jets + B p_{T}" , 98 , 0., 500. );
182     h_jetsB2_pt = fs->make<TH1D>("jetsB2_pt" , "2nd Leading Jets + B p_{T}" , 98 , 0., 500. );
183     h_jetsB3_pt = fs->make<TH1D>("jetsB3_pt" , "3rd Leading Jets + B p_{T}" , 98 , 0., 500. );
184     h_jetsB4_pt = fs->make<TH1D>("jetsB4_pt" , "4th Leading Jets + B p_{T}" , 98 , 0., 500. );
185     h_jetsB_num = fs->make<TH1D>("jetsB_num" , "Number of Jets + B" , 16 , -0.5, 15.5 );
186     h_jetsB1_eta = fs->make<TH1D>("jetsB1_eta" , "Leading Jets + B #eta" , 28 , -3.1, 3.1 );
187     h_jetsB2_eta = fs->make<TH1D>("jetsB2_eta" , "2nd Leading Jets + B #eta" , 28 , -3.1, 3.1 );
188     h_jetsB3_eta = fs->make<TH1D>("jetsB3_eta" , "3rd Leading Jets + B #eta" , 28 , -3.1, 3.1 );
189     h_jetsB4_eta = fs->make<TH1D>("jetsB4_eta" , "4th Leading Jets + B #eta" , 28 , -3.1, 3.1 );
190     h_jetsB1_phi = fs->make<TH1D>("jetsB1_phi" , "Leading Jets + B #phi" , 58 , -5.1, 5.1 );
191     h_jetsB2_phi = fs->make<TH1D>("jetsB2_phi" , "2nd Leading Jets + B #phi" , 58 , -5.1, 5.1 );
192     h_jetsB3_phi = fs->make<TH1D>("jetsB3_phi" , "3rd Leading Jets + B #phi" , 58 , -5.1, 5.1 );
193     h_jetsB4_phi = fs->make<TH1D>("jetsB4_phi" , "4th Leading Jets + B #phi" , 58 , -5.1, 5.1 );
194     h_jetsB1jetsB2_deltaR = fs->make<TH1D>("jetsB1jetsB2_deltaR" , "#Delta R (jb_{1},jb_{2})" , 50 , 0., 5. );
195     h_jetsB1jetsB3_deltaR = fs->make<TH1D>("jetsB1jetsB3_deltaR" , "#Delta R (jb_{1},jb_{3})" , 50 , 0., 5. );
196    
197     // Bjets
198     h_Bjet1_pt = fs->make<TH1D>("Bjet1_pt" , "Leading B-Jet p_{T}" , 98 , 0., 500. );
199     h_Bjet2_pt = fs->make<TH1D>("Bjet2_pt" , "2nd Leading B-Jet p_{T}" , 98 , 0., 500. );
200     h_Bjet_num = fs->make<TH1D>("Bjet_num" , "Number of B-Jets" , 10 , -0.5, 9.5 );
201     //h_Bjet1Bjet2_deltaEta = fs->make<TH1D>("jet1Bjet1_deltaEta" , "#Delta #eta (bj_{1},bj_{2})" , 28 , -3.1, 3.1 );
202     h_Bjet1Bjet2_deltaPhi = fs->make<TH1D>("Bjet1Bjet2_deltaPhi" , "#Delta #phi (bj_{1}, bj_{2})" , 50 , 0., 5. );
203     h_Bjet1Bjet2_cosDeltaPhi = fs->make<TH1D>("Bjet1Bjet2_cosDeltaPhi" , "cos [#Delta #phi (bj_{1}, bj_{2})]" , 26 , -1.2, 1.2 );
204     h_Bjet1Bjet2_deltaR = fs->make<TH1D>("Bjet1Bjet2_deltaR" , "#Delta R (b_{1},b_{2})" , 50 , 0., 5. );
205    
206     // Jets (without b)
207     h_jet_pt = fs->make<TH1D>("jet_pt" , "Jets p_{T}" , 98 , 0., 500. );
208     h_jet1_pt = fs->make<TH1D>("jet1_pt" , "Leading Jet p_{T}" , 98 , 0., 500. );
209     h_jet2_pt = fs->make<TH1D>("jet2_pt" , "2nd Leading Jet p_{T}" , 98 , 0., 500. );
210     h_jet_num = fs->make<TH1D>("jet_num" , "Number of Jets" , 10 , -0.5, 9.5 );
211    
212     // Fancy stuff
213     //h_jet1Bjet1_eta = fs->make<TH1D>("jet1Bjet1_eta" , "#eta (j_{1},bj_{1})" , 28 , -3.1, 3.1 );
214     h_jetfromStop1 = fs->make<TH1D>("jetfromStop1" , "Position of Jets (w/o b) from Stop1" , 16, -0.5, 15.5 );
215     h_BjetfromStop1 = fs->make<TH1D>("BjetfromStop1" , "Position of B-Jets from Stop1" , 16, -0.5, 15.5 );
216     h_Bjet1fromStop1 = fs->make<TH1D>("Bjet1fromStop1" , "Position of Leading B-Jet from Stop1" , 16, -0.5, 15.5 );
217     h_Bjet2fromStop1 = fs->make<TH1D>("Bjet2fromStop1" , "Position of 2nd Leading B-Jet from Stop1" , 16, -0.5, 15.5 );
218     h_jetsBfromStop1 = fs->make<TH1D>("jetsBfromStop1" , "Position of Jets from Stop1" , 16, -0.5, 15.5 );
219     h_jetsB1fromStop1 = fs->make<TH1D>("jetsB1fromStop1" , "Position of Leading Jet from Stop1" , 16, -0.5, 15.5 );
220     h_jetsB2fromStop1 = fs->make<TH1D>("jetsB2fromStop1" , "Position of 2nd Leading Jet from Stop1" , 16, -0.5, 15.5 );
221     h_jetsB3fromStop1 = fs->make<TH1D>("jetsB3fromStop1" , "Position of 3rd Leading Jet from Stop1" , 16, -0.5, 15.5 );
222     h_jetsB4fromStop1 = fs->make<TH1D>("jetsB4fromStop1" , "Position of 4th Leading Jet from Stop1" , 16, -0.5, 15.5 );
223    
224     }
225    
226     // Bool to Sort by Pt
227     bool ComparePt(TLorentzVector a, TLorentzVector b) { return a.Pt() > b.Pt(); }
228    
229     GenAnalyzer::~GenAnalyzer()
230     {
231    
232     // do anything here that needs to be done at desctruction time
233     // (e.g. close files, deallocate resources etc.)
234    
235     }
236    
237    
238     //
239     // member functions
240     //
241    
242     // ------------ method called to for each event ------------
243     void GenAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){
244    
245     using namespace std;
246     using namespace edm;
247     using namespace reco;
248    
249     // Way to call GenParticle from root
250     edm::Handle<std::vector<reco::GenParticle>> particles;
251     iEvent.getByLabel( src_ , particles );
252     const std::vector<reco::GenParticle> & p = *particles;
253    
254     // Inizialize
255     size_t higgs_num = 0;
256    
257     vector< TLorentzVector > p4jet;
258     vector< TLorentzVector > p4Bjet;
259     vector< TLorentzVector > p4jetsB;
260     vector< TLorentzVector > p4HiggsB;
261     vector< TLorentzVector > p4Higgs;
262     vector< TLorentzVector > p4Stop1B;
263     vector< TLorentzVector > p4Stop1jet;
264     vector< TLorentzVector > p4Stop1jetsB;
265     vector< TLorentzVector > p4Stop1;
266    
267     // Begin Loop for GenParticles
268     for(unsigned int i = 0; i < particles->size(); ++ i) {
269 algomez 1.2
270     if( p[i].status()!= 3 ) continue; // Make sure only "final" particles are present
271 algomez 1.1
272     const Candidate * mom = p[i].mother(); // call mother particle
273 algomez 1.2 if( p[i].pdgId() == 5 ) histo->Fill( p[i].pt() ); // test
274 algomez 1.1
275    
276     //////////// True Mass plots
277 algomez 1.2 if( p[i].pdgId() == 25 ){
278 algomez 1.1 higgs_num++; // Check number of Higgs
279     h_higgsTrue_mass->Fill(p[i].mass()); // Higgs true mass
280     }
281 algomez 1.2 if( p[i].pdgId() == 1000002 ) h_stop1True_mass->Fill(p[i].mass()); // Stop1 true mass
282     if( p[i].pdgId() == 1000004 ) h_stop2True_mass->Fill(p[i].mass()); // Stop2 true mass
283 algomez 1.1 ////////////
284    
285    
286     //////////// Storing TLorentz Vectors
287     TLorentzVector tmpjet, tmpBjet, tmpjetsB, tmpHiggs, tmpStop1B, tmpStop1jet; // tmp TLorentzVectors
288     if( mom ){
289     // Jets without b
290 algomez 1.2 if( ( p[i].pdgId() == 1 ) || ( p[i].pdgId() == 2 ) || ( p[i].pdgId() == 3 ) || ( p[i].pdgId() == 4) ){
291 algomez 1.1 tmpjet.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
292     p4jet.push_back( tmpjet );
293     }
294     std::sort(p4jet.begin(), p4jet.end(), ComparePt);
295     // Bjets
296 algomez 1.2 if( p[i].pdgId() == 5 ){
297 algomez 1.1 tmpBjet.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
298     p4Bjet.push_back( tmpBjet );
299     }
300     std::sort(p4Bjet.begin(), p4Bjet.end(), ComparePt);
301     // Jets with b
302 algomez 1.2 if( ( p[i].pdgId() == 1 ) || ( p[i].pdgId() == 2 ) || ( p[i].pdgId() == 3 ) || ( p[i].pdgId() == 4) || ( p[i].pdgId() == 5 )){
303 algomez 1.1 tmpBjet.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
304     p4jetsB.push_back( tmpBjet );
305     }
306     std::sort(p4jetsB.begin(), p4jetsB.end(), ComparePt);
307    
308     // Higgs
309 algomez 1.2 if( ( p[i].pdgId() == 5 ) && ( mom->pdgId() == 25 ) ){
310 algomez 1.1 tmpHiggs.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
311     p4HiggsB.push_back( tmpHiggs );
312     }
313     std::sort(p4HiggsB.begin(), p4HiggsB.end(), ComparePt);
314     // Stop1
315     if( abs( mom->pdgId() )== 1000002 ){
316 algomez 1.2 if( ( p[i].pdgId() == 1 ) || ( p[i].pdgId() == 2 ) || ( p[i].pdgId() == 3 ) || ( p[i].pdgId() == 4) ){
317     tmpStop1jet.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
318     p4Stop1jet.push_back( tmpStop1jet );
319     p4Stop1jetsB.push_back( tmpStop1jet );
320     }
321     else {
322 algomez 1.1 tmpStop1B.SetPxPyPzE(p[i].px(),p[i].py(),p[i].pz(),p[i].energy());
323     p4Stop1B.push_back( tmpStop1B );
324     p4Stop1jetsB.push_back( tmpStop1B );
325     }
326     }
327     std::sort(p4Stop1B.begin(), p4Stop1B.end(), ComparePt);
328     std::sort(p4Stop1jet.begin(), p4Stop1jet.end(), ComparePt);
329     std::sort(p4Stop1jetsB.begin(), p4Stop1jetsB.end(), ComparePt);
330     }
331     } // end GenParticles loop
332    
333 algomez 1.2
334 algomez 1.1 // Test number of true Higgs
335     h_higgs_num->Fill( higgs_num );
336    
337 algomez 1.2 //cout << "run:lumi:event = " << iEvent.id().run() << ":" << iEvent.id().luminosityBlock() << ":" << iEvent.id().event() <<endl;
338 algomez 1.1
339     ///// Higgs reconstructed mass
340     for(unsigned int j = 0; j < p4HiggsB.size()-1; ++j) {
341     for(unsigned int k=j+1; k < p4HiggsB.size(); ++k) {
342     if(j==k) continue; // avoid repetition
343     TLorentzVector p4CandidateHiggs = p4HiggsB[j] + p4HiggsB[k]; // Higgs TLorentzVector
344     //cout << p4HiggsB[j].E() << " " << p4HiggsB[k].E() << " " << p4CandidateHiggs.M() << endl;
345     Double_t massHiggs = 125.0; // nominal mass value
346     Double_t diffmassHiggs = p4CandidateHiggs.M() - massHiggs; // mass difference
347     //cout << diffmassHiggs << endl;
348     if( abs(diffmassHiggs) < 0.1 ){ // diffmass presicion
349     h_higgs_mass->Fill( p4CandidateHiggs.M() ); // Higgs mass
350     h_higgs_pt->Fill( p4CandidateHiggs.Pt() ); // Higgs pT
351     p4Higgs.push_back( p4CandidateHiggs ); // store final TLorentzVector
352     //cout << p4CandidateHiggs.M() << endl;
353     }
354     }
355     }
356 algomez 1.2 ///////////////////////////// /
357 algomez 1.1
358    
359     /////// Stop1 reconstructed mass
360 algomez 1.2 if( st1decay_==1){
361     for(unsigned int j = 0; j < p4Stop1B.size(); ++j) {
362     for(unsigned int k= 0; k < p4Stop1jet.size(); ++k) {
363     TLorentzVector p4CandidateStop1 = p4Stop1B[j] + p4Stop1jet[k]; // higgs tlorentzvector
364     Double_t massStop1 = stop1Mass_ ; // nominal mass value
365     Double_t diffmassStop1 = p4CandidateStop1.M() - massStop1; // mass difference
366     if( abs(diffmassStop1) < 1.0 ){ // diffmass presicion
367     h_stop1_mass->Fill( p4CandidateStop1.M() ); // stop1 mass
368     h_stop1_pt->Fill( p4CandidateStop1.Pt() ); // stop1 pt
369     p4Stop1.push_back( p4CandidateStop1 );
370     }
371     }
372     }
373     } else {
374     for(unsigned int j = 0; j < p4Stop1jet.size(); ++j) {
375     for(unsigned int k= 0; k < p4Stop1jet.size(); ++k) {
376     if( j==k ) continue;
377     TLorentzVector p4CandidateStop1 = p4Stop1jet[j] + p4Stop1jet[k]; // higgs tlorentzvector
378     Double_t massStop1 = stop1Mass_ ; // nominal mass value
379     Double_t diffmassStop1 = p4CandidateStop1.M() - massStop1; // mass difference
380     if( abs(diffmassStop1) < 1.0 ){ // diffmass presicion
381     h_stop1_mass->Fill( p4CandidateStop1.M() ); // stop1 mass
382     h_stop1_pt->Fill( p4CandidateStop1.Pt() ); // stop1 pt
383     p4Stop1.push_back( p4CandidateStop1 );
384     }
385 algomez 1.1 }
386     }
387     }
388 algomez 1.2 ///////////////////////////////// /
389 algomez 1.1
390     // Stop2 reconstructed mass
391     for(unsigned int j = 0; j < p4Higgs.size(); ++j) {
392     for(unsigned int k= 0; k < p4Stop1.size(); ++k) {
393     TLorentzVector p4CandidateStop2 = p4Higgs[j] + p4Stop1[k]; // Higgs TLorentzVector
394     Double_t massStop2 = stop2Mass_; // nominal mass value
395     Double_t diffmassStop2 = p4CandidateStop2.M() - massStop2; // mass difference
396     if( abs(diffmassStop2) < 1.0 ){ // diffmass presicion
397     h_stop2_mass->Fill( p4CandidateStop2.M() ); // Stop1 mass
398     }
399     }
400 algomez 1.2 }//
401 algomez 1.1
402     // Jets + B
403     Double_t Ht = 0;
404     for(unsigned int j = 0; j < p4jetsB.size(); ++j) {
405    
406     Ht += p4jetsB[j].Pt();
407    
408     h_jetsB_pt->Fill( p4jetsB[j].Pt() );
409     h_jetsB1_pt->Fill( p4jetsB[0].Pt() );
410     h_jetsB2_pt->Fill( p4jetsB[1].Pt() );
411     h_jetsB3_pt->Fill( p4jetsB[2].Pt() );
412     h_jetsB4_pt->Fill( p4jetsB[3].Pt() );
413     h_jetsB_num->Fill( p4jetsB.size() );
414     h_jetsB1_eta->Fill( p4jetsB[0].Eta() );
415     h_jetsB2_eta->Fill( p4jetsB[1].Eta() );
416     h_jetsB3_eta->Fill( p4jetsB[2].Eta() );
417     h_jetsB4_eta->Fill( p4jetsB[3].Eta() );
418     h_jetsB1_phi->Fill( p4jetsB[0].Phi() );
419     h_jetsB2_phi->Fill( p4jetsB[1].Phi() );
420     h_jetsB3_phi->Fill( p4jetsB[2].Phi() );
421     h_jetsB4_phi->Fill( p4jetsB[3].Phi() );
422     h_jetsB1jetsB2_deltaR->Fill( p4jetsB[0].DeltaR( p4jetsB[1] ) );
423     h_jetsB1jetsB3_deltaR->Fill( p4jetsB[0].DeltaR( p4jetsB[2] ) );
424    
425     for(unsigned int k= 0; k < p4Stop1jet.size(); ++k) {
426     if( p4Stop1jet[k].Pt() == p4jetsB[j].Pt() ) h_jetfromStop1->Fill( j+1 );
427     //cout << k << " "<< j << " " <<p4Stop1jet[k].Pt() << " " << p4jetsB[j].Pt() << endl;
428 algomez 1.2 }/*
429 algomez 1.1 if( p4Stop1B[0].Pt() == p4jetsB[j].Pt() ) h_Bjet1fromStop1->Fill( j+1 );
430 algomez 1.2 if( p4Stop1B[1].Pt() == p4jetsB[j].Pt() ) h_Bjet2fromStop1->Fill( j+1 );*/
431 algomez 1.1 for(unsigned int kk= 0; kk < p4Stop1B.size(); ++kk) {
432     if( p4Stop1B[kk].Pt() == p4jetsB[j].Pt() ) h_BjetfromStop1->Fill( j+1 );
433     //cout << kk << " "<< j << " " <<p4Stop1B[kk].Pt() << " " << p4jetsB[j].Pt() << endl;
434     }
435     if( p4Stop1jetsB[0].Pt() == p4jetsB[j].Pt() ) h_jetsB1fromStop1->Fill( j+1 );
436     if( p4Stop1jetsB[1].Pt() == p4jetsB[j].Pt() ) h_jetsB2fromStop1->Fill( j+1 );
437     if( p4Stop1jetsB[2].Pt() == p4jetsB[j].Pt() ) h_jetsB3fromStop1->Fill( j+1 );
438     if( p4Stop1jetsB[3].Pt() == p4jetsB[j].Pt() ) h_jetsB4fromStop1->Fill( j+1 );
439     for(unsigned int kkk= 0; kkk < p4Stop1jetsB.size(); ++kkk) {
440     if( p4Stop1jetsB[kkk].Pt() == p4jetsB[j].Pt() ) h_jetsBfromStop1->Fill( j+1 );
441     //cout << kkk << " "<< j << " " <<p4Stop1jetsB[kkk].Pt() << " " << p4jetsB[j].Pt() << endl;
442     }
443     }
444     h_jetsB_ht->Fill( Ht );
445 algomez 1.2 ////////////////////////////
446 algomez 1.1
447     // Bjets
448     for(unsigned int j = 0; j < p4Bjet.size(); ++j) {
449     h_Bjet1_pt->Fill( p4Bjet[0].Pt() );
450     h_Bjet2_pt->Fill( p4Bjet[1].Pt() );
451     h_Bjet_num->Fill( p4Bjet.size() );
452     h_Bjet1Bjet2_deltaPhi->Fill( p4Bjet[0].DeltaPhi( p4Bjet[1] ) );
453     h_Bjet1Bjet2_cosDeltaPhi->Fill( cos( p4Bjet[0].DeltaPhi( p4Bjet[1] ) ) );
454     h_Bjet1Bjet2_deltaR->Fill( p4Bjet[0].DeltaR( p4Bjet[1] ) );
455     }
456 algomez 1.2 //////////////////////////// /
457 algomez 1.1
458     // Jets
459     for(unsigned int j = 0; j < p4jet.size(); ++j) {
460     h_jet_pt->Fill( p4jet[j].Pt() );
461     h_jet1_pt->Fill( p4jet[0].Pt() );
462     h_jet2_pt->Fill( p4jet[1].Pt() );
463 algomez 1.2 }
464 algomez 1.1 h_jet_num->Fill( p4jet.size() );
465     /////////////////////////////
466    
467     }
468    
469     // ------------ method called once each job just after ending the event loop ------------
470     void
471     GenAnalyzer::beginJob() {
472     }
473     void
474     GenAnalyzer::endJob() {
475     }
476    
477     //define this as a plug-in
478     DEFINE_FWK_MODULE(GenAnalyzer);