ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/UHHAnalysis/SFrameAnalysis/src/Cleaner.cxx
Revision: 1.3
Committed: Tue May 8 16:20:06 2012 UTC (12 years, 11 months ago) by peiffer
Content type: text/plain
Branch: MAIN
Changes since 1.2: +33 -17 lines
Log Message:
Speicherleck

File Contents

# User Rev Content
1 peiffer 1.1 #include "../include/Cleaner.h"
2    
3    
4     Cleaner::Cleaner( BaseCycleContainer* input_){
5    
6     bcc = input_;
7    
8     }
9    
10 peiffer 1.2 void Cleaner::JetEnergyResolutionShifter(int syst_shift){
11    
12     double met = bcc->met->pt;
13    
14     for(unsigned int i=0; i<bcc->jets->size(); ++i){
15     Jet jet = bcc->jets->at(i);
16     float gen_pt = jet.genjet_pt;
17     //ignore unmatched jets (which have zero vector) or jets with very low pt:
18     if(gen_pt < 15.0) continue;
19    
20     met += jet.pt*jet.JEC_factor_raw;
21    
22     float recopt = jet.pt;
23     double factor = -10;
24     double abseta = fabs(jet.eta);
25    
26     //numbers taken from https://twiki.cern.ch/twiki/bin/view/CMS/JetResolution
27     if(syst_shift==0){
28     if(abseta < 0.5)
29     factor = 0.052;
30     else if(abseta >= 0.5 && abseta <1.1)
31     factor = 0.057;
32     else if(abseta >= 1.1 && abseta <1.7)
33     factor = 0.096;
34     else if(abseta >= 1.7 && abseta <2.3)
35     factor = 0.134;
36     else if(abseta >= 2.3)
37     factor = 0.288;
38     }
39     else if(syst_shift>0){
40     if(abseta < 0.5)
41     factor = 0.11;
42     else if(abseta >= 0.5 && abseta <1.1)
43     factor = 0.12;
44     else if(abseta >= 1.1 && abseta <1.7)
45     factor = 0.16;
46     else if(abseta >= 1.7 && abseta <2.3)
47     factor = 0.23;
48     else if(abseta >= 2.3)
49     factor = 0.49;
50     }
51     else{
52     if(abseta < 0.5)
53     factor = -0.01;
54     else if(abseta >= 0.5 && abseta <1.1)
55     factor = 0.00;
56     else if(abseta >= 1.1 && abseta <1.7)
57     factor = 0.04;
58     else if(abseta >= 1.7 && abseta <2.3)
59     factor = 0.03;
60     else if(abseta >= 2.3)
61     factor = 0.09;
62     }
63    
64     float deltapt = (recopt - gen_pt) * factor;
65     float ptscale = std::max(0.0f, (recopt + deltapt) / recopt);
66     jet.pt *= ptscale;
67     bcc->jets->at(i).pt = jet.pt;
68    
69     //propagate JER shifts to MET
70     met -= jet.pt*jet.JEC_factor_raw;
71     }
72    
73     //store changed MET, flip phi if new MET is negative
74     if(met>=0){
75     bcc->met->pt = met;
76     }
77     else{
78     bcc->met->pt = -1*met;
79     if(bcc->met->phi<=0)
80     bcc->met->phi = bcc->met->phi+PI;
81     else
82     bcc->met->phi = bcc->met->phi-PI;
83     }
84    
85     }
86    
87 peiffer 1.1
88     //tight ele ID from https://twiki.cern.ch/twiki/bin/view/CMS/EgammaCutBasedIdentification
89     bool Cleaner::eleID(Electron ele){
90    
91     bool pass=false;
92    
93     if(fabs(ele.supercluster_eta)<1.4442){
94     if(ele.dEtaIn<0.004 && ele.dPhiIn<0.03 && ele.sigmaIEtaIEta<0.01 && ele.HoverE<0.12 && fabs(1./ele.EcalEnergy-1./ele.v4().P())<0.05) pass=true;
95     }
96     else if( fabs(ele.supercluster_eta)>1.5660){
97     if(ele.dEtaIn<0.005 && ele.dPhiIn<0.02 && ele.sigmaIEtaIEta<0.03 && ele.HoverE<0.10 && fabs(1./ele.EcalEnergy-1./ele.v4().P())<0.05) pass=true;
98     }
99    
100     return pass;
101    
102     }
103    
104 peiffer 1.2 //pf ID has already been applied when using goodPatJets
105     bool Cleaner::pfID(Jet jet){
106    
107     if(jet.numberOfDaughters>1
108     && jet.neutralHadronEnergyFraction<0.99
109     && jet.neutralEmEnergyFraction<0.99){
110    
111     if(fabs(jet.eta)>=2.4)
112     return true;
113    
114     if(jet.chargedEmEnergyFraction<0.99
115     && jet.chargedHadronEnergyFraction>0
116     && jet.chargedMultiplicity>0)
117     return true;
118    
119     }
120     return false;
121    
122     }
123    
124 peiffer 1.1
125 peiffer 1.3 void Cleaner::ElectronCleaner(double ptmin, double etamax){
126 peiffer 1.1
127 peiffer 1.3 std::vector<Electron> good_eles;
128 peiffer 1.1 for(unsigned int i=0; i<bcc->electrons->size(); ++i){
129     Electron ele = bcc->electrons->at(i);
130     if(ele.pt>ptmin){
131     if(fabs(ele.eta)<etamax){
132     if(fabs(ele.supercluster_eta)<1.4442 || fabs(ele.supercluster_eta)>1.5660){
133     if(bcc->pvs->size()>0){
134     if(ele.gsfTrack_dxy_vertex(bcc->pvs->at(0).x, bcc->pvs->at(0).y)<0.02){
135     if(ele.passconversionveto){
136     //if(ele.mvaTrigV0>0.0){
137     if(eleID(ele)){
138     if(ele.relIso()<0.1){
139 peiffer 1.3 good_eles.push_back(ele);
140 peiffer 1.1 }
141     }
142     //}
143     }
144     }
145     }
146     }
147     }
148     }
149     }
150    
151 peiffer 1.3 bcc->electrons->clear();
152    
153     for(unsigned int i=0; i<good_eles.size(); ++i){
154     bcc->electrons->push_back(good_eles[i]);
155     }
156 peiffer 1.1
157     }
158    
159    
160 peiffer 1.3 void Cleaner::MuonCleaner(double ptmin, double etamax){
161    
162     std::vector<Muon> good_mus;
163 peiffer 1.1 for(unsigned int i=0; i<bcc->muons->size(); ++i){
164     Muon mu = bcc->muons->at(i);
165     if(mu.pt>ptmin){
166 peiffer 1.2 if(fabs(mu.eta)<etamax){
167 peiffer 1.1 if(mu.isGlobalMuon){
168     if(mu.globalTrack_chi2/mu.globalTrack_ndof<10){
169     if(mu.innerTrack_trackerLayersWithMeasurement>8){
170     if(mu.dB<0.02){
171     if(mu.relIso()<0.0125){
172     if(fabs(mu.vertex_z-bcc->pvs->at(0).z)<1){
173     if(mu.innerTrack_numberOfValidPixelHits>0){
174     if(mu.numberOfMatchedStations>1){
175 peiffer 1.3 good_mus.push_back(mu);
176 peiffer 1.1 }
177     }
178     }
179     }
180     }
181     }
182     }
183     }
184     }
185     }
186     }
187 peiffer 1.3 bcc->muons->clear();
188    
189     for(unsigned int i=0; i<good_mus.size(); ++i){
190     bcc->muons->push_back(good_mus[i]);
191     }
192 peiffer 1.1
193     }
194 peiffer 1.2
195    
196 peiffer 1.3 void Cleaner::JetCleaner(double ptmin, double etamax, bool doPFID){
197    
198     std::vector<Jet> good_jets;
199 peiffer 1.2 for(unsigned int i=0; i<bcc->jets->size(); ++i){
200     Jet jet = bcc->jets->at(i);
201     if(jet.pt>ptmin){
202     if(fabs(jet.eta)<etamax){
203     if(!doPFID || pfID(jet)){
204 peiffer 1.3 good_jets.push_back(jet);
205 peiffer 1.2 }
206     }
207     }
208     }
209    
210 peiffer 1.3 bcc->jets->clear();
211    
212     for(unsigned int i=0; i<good_jets.size(); ++i){
213     bcc->jets->push_back(good_jets[i]);
214     }
215 peiffer 1.2
216     }
217    
218 peiffer 1.3 void Cleaner::TopJetCleaner(double ptmin, double etamax, bool doPFID){
219 peiffer 1.2
220 peiffer 1.3 std::vector<TopJet> good_topjets;
221 peiffer 1.2 for(unsigned int i=0; i<bcc->topjets->size(); ++i){
222     TopJet topjet = bcc->topjets->at(i);
223     if(topjet.pt>ptmin){
224     if(fabs(topjet.eta)<etamax){
225     if(!doPFID || pfID(topjet)){
226 peiffer 1.3 good_topjets.push_back(topjet);
227 peiffer 1.2 }
228     }
229     }
230     }
231 peiffer 1.3 bcc->topjets->clear();
232 peiffer 1.2
233 peiffer 1.3 for(unsigned int i=0; i<good_topjets.size(); ++i){
234     bcc->topjets->push_back(good_topjets[i]);
235     }
236 peiffer 1.2
237     }