ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/PATDebug/FinalPlots/src/FinalPlots.cc
Revision: 1.1.1.1 (vendor branch)
Committed: Thu Jan 7 15:54:11 2010 UTC (15 years, 4 months ago) by auterman
Content type: text/plain
Branch: PATDebug
CVS Tags: start
Changes since 1.1: +0 -0 lines
Error occurred while calculating annotation data.
Log Message:
PAT debugging

File Contents

# Content
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);