ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/PATDebug/FinalPlots/src/FinalPlots.cc
Revision: 1.1
Committed: Thu Jan 7 15:54:11 2010 UTC (15 years, 4 months ago) by auterman
Content type: text/plain
Branch: MAIN
Branch point for: PATDebug
Log Message:
Initial revision

File Contents

# User Rev Content
1 auterman 1.1 // -*- C++ -*-
2     //
3     // Package: FinalPlots
4     // Class: FinalPlots
5     //
6     /**\class FinalPlots FinalPlots.cc RA2/FinalPlots/src/FinalPlots.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14     // Original Author: Christian Autermann,68/112,2115,
15     // Created: Sun Oct 18 20:00:45 CEST 2009
16     // $Id: FinalPlots.cc,v 1.7 2010/01/06 13:42:37 auterman Exp $
17     //
18     //
19    
20    
21     // system include files
22     #include <memory>
23     #include <string>
24     #include <cmath>
25     #include <numeric>
26    
27     // user include files
28     #include "FWCore/Framework/interface/Frameworkfwd.h"
29     #include "FWCore/Framework/interface/EDAnalyzer.h"
30     #include "FWCore/Framework/interface/Event.h"
31     #include "FWCore/Framework/interface/MakerMacros.h"
32     #include "FWCore/ParameterSet/interface/ParameterSet.h"
33     #include "DataFormats/Math/interface/LorentzVector.h"
34     #include "DataFormats/Math/interface/deltaPhi.h"
35     #include "DataFormats/METReco/interface/CaloMET.h"
36     #include "DataFormats/METReco/interface/MET.h"
37     #include "DataFormats/JetReco/interface/CaloJet.h"
38     #include "DataFormats/JetReco/interface/PFJet.h"
39     #include "DataFormats/Candidate/interface/Candidate.h"
40     #include "FWCore/ServiceRegistry/interface/Service.h"
41     #include "PhysicsTools/UtilAlgos/interface/TFileService.h"
42    
43     #include "TH1F.h"
44     //
45     // class decleration
46     //
47    
48     class FinalPlots : public edm::EDAnalyzer {
49     public:
50     explicit FinalPlots(const edm::ParameterSet&);
51     ~FinalPlots();
52    
53    
54     private:
55     virtual void beginJob(const edm::EventSetup&);
56     virtual void analyze(const edm::Event&, const edm::EventSetup&);
57     virtual void endJob() ;
58     double dPhiBiased(const edm::View<reco::Candidate>*jets,
59     const edm::View<reco::Candidate>::const_iterator jet);
60    
61    
62     typedef ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > LorentzV;
63     std::vector<double> deltaSumPt_permutations(const std::vector<LorentzV>& p4s);
64     double alphaT(const std::vector<LorentzV>& p4s);
65    
66     // ----------member data ---------------------------
67     edm::InputTag weightName_;
68     edm::InputTag Jet_;
69     edm::InputTag Met_;
70     std::string name_;
71     double weight_, jetptmin_, jetetamax_;
72    
73     TH1F * HT_;
74     TH1F * MHT_;
75     TH1F * MET_;
76     TH1F * Jet1Pt_, *Jet2Pt_, *Jet3Pt_, *Jet4Pt_;
77     TH1F * JetMult_;
78     TH1F * alphaT_;
79     TH1F * dPhiMin_;
80     TH1F * dPhiBiased_;
81    
82     };
83    
84     FinalPlots::FinalPlots(const edm::ParameterSet& iConfig):
85     weightName_(iConfig.getParameter<edm::InputTag>("weightName") ),
86     Jet_( iConfig.getParameter<edm::InputTag>("Jet") ),
87     Met_( iConfig.getParameter<edm::InputTag>("MET") ),
88     name_( iConfig.getParameter<std::string>("uncertainty_name") ),
89     jetptmin_ ( iConfig.getParameter<double>("JetPtMin") ),
90     jetetamax_( iConfig.getParameter<double>("JetEtaMax") )
91     {
92     }
93    
94     // ------------ method called once each job just before starting event loop ------------
95     void
96     FinalPlots::beginJob(const edm::EventSetup&)
97     {
98     edm::Service<TFileService> fs;
99     if( !fs ){
100     throw edm::Exception( edm::errors::Configuration,
101     "TFile Service is not registered in cfg file" );
102     }
103    
104     std::string histname = "HT"+name_;
105     HT_ = fs->make<TH1F>(histname.c_str(),";HT [GeV];events", 200, 0.0, 2000.0);
106     HT_->Sumw2();
107    
108     histname = "MHT"+name_;
109     MHT_ = fs->make<TH1F>(histname.c_str(),";MHT [GeV];events", 200, 0.0, 1000.0);
110     MHT_->Sumw2();
111    
112     histname = "MET"+name_;
113     MET_ = fs->make<TH1F>(histname.c_str(),";MET [GeV];events", 200, 0.0, 1000.0);
114     MET_->Sumw2();
115    
116     histname = "Jet1Pt"+name_;
117     Jet1Pt_ = fs->make<TH1F>(histname.c_str(),";1. Jet Pt [GeV];events", 200, 0.0, 1000.0);
118     Jet1Pt_->Sumw2();
119    
120     histname = "Jet2Pt"+name_;
121     Jet2Pt_ = fs->make<TH1F>(histname.c_str(),";2. Jet Pt [GeV];events", 200, 0.0, 1000.0);
122     Jet2Pt_->Sumw2();
123    
124     histname = "Jet3Pt"+name_;
125     Jet3Pt_ = fs->make<TH1F>(histname.c_str(),";3. Jet Pt [GeV];events", 200, 0.0, 1000.0);
126     Jet3Pt_->Sumw2();
127    
128     histname = "Jet4Pt"+name_;
129     Jet4Pt_ = fs->make<TH1F>(histname.c_str(),";4. Jet Pt [GeV];events", 200, 0.0, 1000.0);
130     Jet4Pt_->Sumw2();
131    
132     histname = "JetMult"+name_;
133     JetMult_ = fs->make<TH1F>(histname.c_str(),";Jet multiplicity;events", 21, -0.5, 20.5);
134     JetMult_->Sumw2();
135    
136     histname = "alphaT"+name_;
137     alphaT_ = fs->make<TH1F>(histname.c_str(),";alphaT;events", 200, 0.0, 2.0);
138     alphaT_->Sumw2();
139    
140     histname = "dPhiMin"+name_;
141     dPhiMin_ = fs->make<TH1F>(histname.c_str(),";#Delta#phi_{min};events", 200, 0.0, 3.2);
142     dPhiMin_->Sumw2();
143    
144     histname = "dPhiBiased"+name_;
145     dPhiBiased_ = fs->make<TH1F>(histname.c_str(),";#Delta#phi_{biased};events", 200, 0.0, 3.2);
146     dPhiBiased_->Sumw2();
147     }
148    
149    
150     FinalPlots::~FinalPlots()
151     {
152    
153     // do anything here that needs to be done at desctruction time
154     // (e.g. close files, deallocate resources etc.)
155    
156     }
157    
158    
159     //
160     // member functions
161     //
162     // ------------ biased delta phi ----------------------------
163     double FinalPlots::dPhiBiased(const edm::View<reco::Candidate> * jets, const edm::View<reco::Candidate>::const_iterator excljet)
164     {
165     math::PtEtaPhiMLorentzVector htvec(0.0, 0.0, 0.0, 0.0);
166     for (edm::View<reco::Candidate>::const_iterator jet=jets->begin();
167     jet!=jets->end(); ++jet){
168     if ( fabs(jet->eta())>jetetamax_ ) continue;
169     if ( jet->pt()<jetptmin_ ) continue;
170     if ( jet==excljet ) continue;
171     htvec+=jet->p4();
172     }
173     return deltaPhi(htvec, *excljet);
174     }
175    
176     std::vector<double> FinalPlots::deltaSumPt_permutations(const std::vector<LorentzV>& p4s)
177     {
178     std::vector<std::vector<double> > ht( 1<<(p4s.size()-1) , std::vector<double>( 2, 0.) );
179     for(unsigned i=0; i < ht.size(); i++) {
180     for(unsigned j=0; j < p4s.size(); j++) {
181     ht [i] [(i/(1<<j))%2] += p4s[j].pt();
182     }
183     }
184     std::vector<double> deltaHT; for(unsigned i=0; i<ht.size(); i++) deltaHT.push_back(fabs(ht[i][0]-ht[i][1]));
185     return deltaHT;
186     }
187    
188     double FinalPlots::alphaT(const std::vector<LorentzV>& p4s)
189     {
190     if(p4s.size()<2) return 0;
191    
192     std::vector<double> pTs;
193     for(unsigned i=0; i<p4s.size(); i++) pTs.push_back(p4s[i].pt());
194     for(unsigned i=0; i<p4s.size(); i++) pTs.push_back(p4s[i].pt());
195     const std::vector<double> DHTper( deltaSumPt_permutations(p4s) );
196    
197     const double mDHT = *(std::min_element( DHTper.begin(), DHTper.end() ));
198     const double sumPT = accumulate( pTs.begin(), pTs.end(), double(0) );
199     const LorentzV sumP4 = accumulate( p4s.begin(), p4s.end(), LorentzV() );
200    
201     return 0.5 * ( sumPT - mDHT ) / sqrt( sumPT*sumPT - sumP4.perp2() );
202     }
203    
204    
205     // ------------ method called to for each event ------------
206     void
207     FinalPlots::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
208     {
209     using namespace edm;
210     using namespace std;
211    
212     edm::Handle< double > event_weight;
213     iEvent.getByLabel(weightName_, event_weight);
214     weight_ = (event_weight.isValid() ? (*event_weight) : 1.0);
215    
216     edm::Handle<edm::View<reco::Candidate> > jet_hnd;
217     iEvent.getByLabel(Jet_, jet_hnd);
218    
219     edm::Handle<edm::View<reco::MET> > met_hnd;
220     iEvent.getByLabel(Met_, met_hnd);
221    
222     MET_->Fill( met_hnd->front().et(), weight_ );
223    
224     double ht=0.0, dphimin=999., dphibiased=999.;
225     int jetmult = 0;
226     math::PtEtaPhiMLorentzVector htvec(0.0, 0.0, 0.0, 0.0);
227     std::vector <LorentzV> forAlphaT;
228     for (edm::View<reco::Candidate>::const_iterator jet=jet_hnd->begin();
229     jet!=jet_hnd->end(); ++jet){
230     if ( fabs(jet->eta())>jetetamax_ ) continue;
231     if ( jet->pt()<jetptmin_ ) continue;
232     forAlphaT.push_back(jet->p4());
233     htvec+=jet->p4();
234     ht+=jet->pt();
235     if (jetmult==0) Jet1Pt_->Fill( jet->pt(), weight_ );
236     else if (jetmult==1) Jet2Pt_->Fill( jet->pt(), weight_ );
237     else if (jetmult==2) Jet3Pt_->Fill( jet->pt(), weight_ );
238     else if (jetmult==3) Jet4Pt_->Fill( jet->pt(), weight_ );
239     ++jetmult;
240    
241     if ( deltaPhi(*jet, met_hnd->front()) < dphimin )
242     dphimin = deltaPhi(*jet, met_hnd->front());
243    
244     double thisdphi = dPhiBiased(&(*jet_hnd), jet);
245     if (thisdphi < dphibiased)
246     dphibiased = thisdphi;
247    
248     }
249     HT_ ->Fill( ht, weight_ );
250     MHT_->Fill( htvec.pt(), weight_ );
251     JetMult_->Fill( jetmult, weight_ );
252     alphaT_->Fill( alphaT(forAlphaT), weight_ );
253     dPhiMin_->Fill( dphimin, weight_ );
254     dPhiBiased_->Fill( dphibiased, weight_ );
255    
256     //other variables
257     //MPT...
258     }
259    
260    
261     // ------------ method called once each job just after ending the event loop ------------
262     void
263     FinalPlots::endJob() {
264     }
265    
266     //define this as a plug-in
267     DEFINE_FWK_MODULE(FinalPlots);