ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/SelMods/src/WBFExampleAnalysisMod.cc
Revision: 1.5
Committed: Wed Dec 22 20:33:36 2010 UTC (14 years, 4 months ago) by ceballos
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a, Mit_028a, Mit_028, Mit_027, Mit_027a, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, HEAD
Changes since 1.4: +1 -1 lines
Log Message:
some fixes

File Contents

# Content
1 // $Id $
2
3 #include "MitPhysics/SelMods/interface/WBFExampleAnalysisMod.h"
4 #include <TH1D.h>
5 #include <TH2D.h>
6 #include <TParameter.h>
7 #include "MitAna/DataUtil/interface/Debug.h"
8 #include "MitAna/DataTree/interface/Names.h"
9 #include "MitPhysics/Init/interface/ModNames.h"
10 #include "MitAna/DataCont/interface/ObjArray.h"
11 #include "MitCommon/MathTools/interface/MathUtils.h"
12 #include "MitAna/DataTree/interface/ParticleCol.h"
13 #include "TFile.h"
14 #include "TTree.h"
15
16 using namespace mithep;
17 ClassImp(mithep::WBFExampleAnalysisMod)
18
19 //--------------------------------------------------------------------------------------------------
20 WBFExampleAnalysisMod::WBFExampleAnalysisMod(const char *name, const char *title) :
21 BaseMod(name,title),
22 fMetName("NoDefaultNameSet"),
23 fCleanJetsName("NoDefaultNameSet"),
24 fVertexName(ModNames::gkGoodVertexesName),
25 fMet(0),
26 fVertices(0),
27 fJetPtMax(30),
28 fJetPtMin(30),
29 fDeltaEtaMin(4),
30 fDiJetMassMin(500)
31 {
32 // Constructor.
33 }
34
35 //--------------------------------------------------------------------------------------------------
36 void WBFExampleAnalysisMod::Begin()
37 {
38 // Run startup code on the client machine. For this module, we dont do
39 // anything here.
40 }
41
42 //--------------------------------------------------------------------------------------------------
43 void WBFExampleAnalysisMod::SlaveBegin()
44 {
45 // Run startup code on the computer (slave) doing the actual analysis. Here,
46 // we typically initialize histograms and other analysis objects and request
47 // branches. For this module, we request a branch of the MitTree.
48
49 //Create your histograms here
50
51 //*************************************************************************************************
52 // Selection Histograms
53 //*************************************************************************************************
54 AddTH1(fWBFSelection,"fWBFSelection", ";Cut Number;Number of Events", 7, -1.5, 5.5);
55 AddTH1(fWBFDeltaPhi, "fWBFDeltaPhi", ";Delta Phi;Number of Events", 90,0.,180 );
56
57 //***********************************************************************************************
58 // N-1 Histograms
59 //***********************************************************************************************
60 //All events
61 AddTH1(fWBFPtJetMax_NMinusOne, "fWBFPtJetMax_NMinusOne", ";Pt Jet Max;Number of Events",300,0.,300. );
62 AddTH1(fWBFPtJetMin_NMinusOne, "fWBFPtJetMin_NMinusOne", ";Pt Jet Min;Number of Events",300,0.,300. );
63 AddTH1(fWBFEta12_NMinusOne, "fWBFEta12_NMinusOne", ";eta1*eta2;Number of Events", 2,-1.5,1.5 );
64 AddTH1(fWBFdeltaEta_NMinusOne, "fWBFdeltaEta_NMinusOne", ";Delta Eta;Number of Events", 100,0.,10. );
65 AddTH1(fWBFdijetMass_NMinusOne,"fWBFdijetMass_NMinusOne",";DiJet Mass;Number of Events",300,0.,3000.);
66 AddTH1(fWBFZVar_NMinusOne, "fWBFZVar_NMinusOne", ";Z variable;Number of Events",50,0.,5. );
67
68 //***********************************************************************************************
69 // After all cuts Histograms
70 //***********************************************************************************************
71 AddTH1(fWBFSSMass_afterCuts,"fWBFSSMass_afterCuts",";SS dilepton Mass;Number of Events",200,0.,400);
72 AddTH1(fWBFSSDeltaPhi_afterCuts,"fWBFSSDeltaPhi_afterCuts",";SS DeltaPhi 2l;Number of Events",90,0.,180);
73 AddTH1(fWBFOSMass_afterCuts,"fWBFOSMass_afterCuts",";OS dilepton Mass;Number of Events",200,0.,400);
74 AddTH1(fWBFOSDeltaPhi_afterCuts,"fWBFOSDeltaPhi_afterCuts",";OS DeltaPhi 2l;Number of Events",90,0.,180);
75
76 }
77
78 //--------------------------------------------------------------------------------------------------
79 void WBFExampleAnalysisMod::Process()
80 {
81 //Obtain all the good objects from the event cleaning module
82 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
83 ParticleOArr *CleanLeptons = dynamic_cast<mithep::ParticleOArr*>
84 (FindObjThisEvt(ModNames::gkMergedLeptonsName));
85 ObjArray<Jet> *CleanJets = dynamic_cast<ObjArray<Jet>* >
86 (FindObjThisEvt(fCleanJetsName.Data()));
87 TParameter<Double_t> *NNLOWeight = GetObjThisEvt<TParameter<Double_t> >("NNLOWeight");
88
89 MetCol *met = dynamic_cast<ObjArray<Met>* >(FindObjThisEvt(fMetName));
90 const Met *caloMet = 0;
91 if (met) {
92 caloMet = met->At(0);
93 } else {
94 cout << "Error: Met Collection " << fMetName << " could not be loaded.\n";
95 return;
96 }
97
98 if(CleanJets->GetEntries() < 2) return;
99
100 //*********************************************************************************************
101 //Define Cuts
102 //*********************************************************************************************
103 const int nCuts = 6;
104 bool passCut[nCuts] = {false, false, false, false, false, false};
105
106 // ptjet max cut
107 if(CleanJets->At(0)->Pt() > fJetPtMax) passCut[0] = true;
108
109 // ptjet min cut
110 if(CleanJets->At(1)->Pt() > fJetPtMin) passCut[1] = true;
111
112 // this cut is always applied
113 if(CleanJets->At(0)->Eta()*CleanJets->At(1)->Eta() < 0) passCut[2] = true;
114
115 // deltaEta cut
116 double deltaEta = TMath::Abs(CleanJets->At(0)->Eta()-CleanJets->At(1)->Eta());
117 if(deltaEta > fDeltaEtaMin) passCut[3] = true;
118
119 // dijet mass cut
120 CompositeParticle dijet;
121 dijet.AddDaughter(CleanJets->At(0));
122 dijet.AddDaughter(CleanJets->At(1));
123 if(dijet.Mass() > fDiJetMassMin) passCut[4] = true;
124
125 // jet veto cut, use of Zeppenfeld variable
126 passCut[5] = true;
127 double zVarMin = 30.;
128 if(CleanJets->GetEntries() >=2 ){
129 for(UInt_t i=2; i<CleanJets->GetEntries(); i++){
130 if(CleanJets->At(i)->Pt() <= 30.0) return;
131 double zVar = TMath::Abs(CleanJets->At(i)->Eta()-(CleanJets->At(0)->Eta()+CleanJets->At(1)->Eta())/2)/
132 TMath::Abs(CleanJets->At(0)->Eta()-CleanJets->At(1)->Eta());
133 if(zVar < zVarMin) zVarMin = zVar;
134 }
135 if(zVarMin < 1) passCut[5] = false;
136 }
137
138 //*********************************************************************************************
139 //Make Selection Histograms. Number of events passing each level of cut
140 //*********************************************************************************************
141 bool passAllCuts = true;
142 for(int c=0; c<nCuts; c++) passAllCuts = passAllCuts & passCut[c];
143
144 if(passAllCuts){
145 double deltaPhiJJ = MathUtils::DeltaPhi(CleanJets->At(0)->Phi(),
146 CleanJets->At(1)->Phi())* 180.0 / TMath::Pi();
147 fWBFDeltaPhi->Fill(deltaPhiJJ,NNLOWeight->GetVal());
148 }
149
150 //Cut Selection Histograms
151 fWBFSelection->Fill(-1,NNLOWeight->GetVal());
152 for (int k=0;k<nCuts;k++) {
153 bool pass = true;
154 bool passPreviousCut = true;
155 for (int p=0;p<=k;p++) {
156 pass = (pass && passCut[p]);
157 if (p<k)
158 passPreviousCut = (passPreviousCut&& passCut[p]);
159 }
160
161 if (pass) {
162 fWBFSelection->Fill(k,NNLOWeight->GetVal());
163 }
164 }
165
166 //*********************************************************************************************
167 // N-1 Histograms
168 //*********************************************************************************************
169 // N-1 ptjet max
170 bool pass = true;
171 for (int k=0;k<nCuts;k++) {
172 if (k != 0) {
173 pass = (pass && passCut[k]);
174 }
175 }
176 if (pass) {
177 fWBFPtJetMax_NMinusOne->Fill(TMath::Min(CleanJets->At(0)->Pt(),299.999),NNLOWeight->GetVal());
178 }
179
180 // N-1 ptjet min
181 pass = true;
182 for (int k=0;k<nCuts;k++) {
183 if (k != 1) {
184 pass = (pass && passCut[k]);
185 }
186 }
187 if (pass) {
188 fWBFPtJetMin_NMinusOne->Fill(TMath::Min(CleanJets->At(1)->Pt(),299.999),NNLOWeight->GetVal());
189 }
190
191 // N-1 eta1*eta2
192 pass = true;
193 for (int k=0;k<nCuts;k++) {
194 if (k != 2) {
195 pass = (pass && passCut[k]);
196 }
197 }
198 if (pass) {
199 fWBFEta12_NMinusOne->Fill(CleanJets->At(0)->Eta()*CleanJets->At(1)->Eta()/
200 TMath::Abs(CleanJets->At(0)->Eta()*CleanJets->At(1)->Eta()),NNLOWeight->GetVal());
201 }
202
203 // N-1 deltaEta
204 pass = true;
205 for (int k=0;k<nCuts;k++) {
206 if (k != 3) {
207 pass = (pass && passCut[k]);
208 }
209 }
210 if (pass) {
211 fWBFdeltaEta_NMinusOne->Fill(TMath::Min(deltaEta,9.999),NNLOWeight->GetVal());
212 }
213
214 // N-1 dijet mass
215 pass = true;
216 for (int k=0;k<nCuts;k++) {
217 if (k != 4) {
218 pass = (pass && passCut[k]);
219 }
220 }
221 if (pass) {
222 fWBFdijetMass_NMinusOne->Fill(TMath::Min(dijet.Mass(),2999.999),NNLOWeight->GetVal());
223 }
224
225 // N-1 dijet mass
226 pass = true;
227 for (int k=0;k<nCuts;k++) {
228 if (k != 5) {
229 pass = (pass && passCut[k]);
230 }
231 }
232 if (pass) {
233 fWBFZVar_NMinusOne->Fill(TMath::Min(zVarMin,4.999),NNLOWeight->GetVal());
234 }
235
236 //*********************************************************************************************
237 //Plots after all Cuts
238 //*********************************************************************************************
239 if (passAllCuts) {
240 // Distributions for dileptons events
241 if (CleanLeptons->GetEntries() >= 2 &&
242 CleanLeptons->At(0)->Pt() > 20 && CleanLeptons->At(1)->Pt() > 10){
243
244 CompositeParticle dilepton;
245 dilepton.AddDaughter(CleanLeptons->At(0));
246 dilepton.AddDaughter(CleanLeptons->At(1));
247 double deltaPhiLeptons = MathUtils::DeltaPhi(CleanLeptons->At(0)->Phi(),
248 CleanLeptons->At(1)->Phi())* 180.0 / TMath::Pi();
249
250 if(CleanLeptons->At(0)->Charge() * CleanLeptons->At(1)->Charge() > 0){ // same-sign
251 fWBFSSMass_afterCuts->Fill(TMath::Min(dilepton.Mass(),399.999),NNLOWeight->GetVal());
252 fWBFSSDeltaPhi_afterCuts->Fill(deltaPhiLeptons,NNLOWeight->GetVal());
253 }
254 else { // opposite-sign
255 fWBFOSMass_afterCuts->Fill(TMath::Min(dilepton.Mass(),399.999),NNLOWeight->GetVal());
256 fWBFOSDeltaPhi_afterCuts->Fill(deltaPhiLeptons,NNLOWeight->GetVal());
257 }
258 }
259 }
260
261 return;
262 }
263
264 //--------------------------------------------------------------------------------------------------
265 void WBFExampleAnalysisMod::SlaveTerminate()
266 {
267
268 // Run finishing code on the computer (slave) that did the analysis. For this
269 // module, we dont do anything here.
270
271 }
272 //--------------------------------------------------------------------------------------------------
273 void WBFExampleAnalysisMod::Terminate()
274 {
275 // Run finishing code on the client computer. For this module, we dont do
276 // anything here.
277
278 }