ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MuonTools.cc
(Generate patch)

Comparing UserCode/MitPhysics/Utils/src/MuonTools.cc (file contents):
Revision 1.4 by ceballos, Tue Nov 11 21:21:25 2008 UTC vs.
Revision 1.28 by anlevin, Thu May 17 13:25:30 2012 UTC

# Line 1 | Line 1
1 + // $Id$
2 +
3   #include "MitPhysics/Utils/interface/MuonTools.h"
4 + #include <TFile.h>
5 +
6 + ClassImp(mithep::MuonTools)
7 +
8   using namespace mithep;
9  
10 < MuonTools::MuonTools() :
11 <  fpion_em_etaEmi(0),
12 <  fpion_had_etaEmi(0),
7 <  fpion_had_etaTmi(0),
8 <  fpion_em_etaB(0),
9 <  fpion_had_etaB(0),
10 <  fpion_ho_etaB(0),
11 <  fpion_had_etaTpl(0),
12 <  fpion_em_etaEpl(0),
13 <  fpion_had_etaEpl(0),
10 > //--------------------------------------------------------------------------------------------------
11 > MuonTools::MuonTools(const char *mutemp, const char *pitemp) :
12 >  fIsInit(kFALSE),
13    fmuon_em_etaEmi(0),
14    fmuon_had_etaEmi(0),
15    fmuon_had_etaTmi(0),
# Line 19 | Line 18 | MuonTools::MuonTools() :
18    fmuon_ho_etaB(0),
19    fmuon_had_etaTpl(0),
20    fmuon_em_etaEpl(0),
21 <  fmuon_had_etaEpl(0) {}
22 < MuonTools::~MuonTools() {
23 <  delete fpion_em_etaEmi;
24 <  delete fpion_had_etaEmi;
25 <  delete fpion_had_etaTmi;
26 <  delete fpion_em_etaB;
27 <  delete fpion_had_etaB;
28 <  delete fpion_ho_etaB;
29 <  delete fpion_had_etaTpl;
30 <  delete fpion_em_etaEpl;
31 <  delete fpion_had_etaEpl;
32 <  delete fmuon_em_etaEmi;
33 <  delete fmuon_had_etaEmi;
34 <  delete fmuon_had_etaTmi;
35 <  delete fmuon_em_etaB;
36 <  delete fmuon_had_etaB;
37 <  delete fmuon_ho_etaB;
38 <  delete fmuon_had_etaTpl;
39 <  delete fmuon_em_etaEpl;
40 <  delete fmuon_had_etaEpl;
41 < }
42 <
43 < double MuonTools::getCaloCompatability(mithep::Muon* iMuon,bool iEMSpecial, bool iCorrectedHCAL) {
44 <  if(fpion_em_etaEmi == 0) {
45 <    TFile* fPion_templates = new TFile("$CMSSW_BASE/src/MitPhysics/Init/PionCaloTemplate.root","READ");
46 <    TFile* fMuon_templates = new TFile("$CMSSW_BASE/src/MitPhysics/Init/MuonCaloTemplate.root","READ");
47 <    fpion_em_etaEmi  = (TH2D*) fPion_templates->Get("em_etaEmi");
48 <    fpion_had_etaEmi = (TH2D*) fPion_templates->Get("had_etaEmi");
49 <    fpion_had_etaTmi = (TH2D*) fPion_templates->Get("had_etaTmi");
50 <    fpion_em_etaB    = (TH2D*) fPion_templates->Get("em_etaB")   ;
51 <    fpion_had_etaB   = (TH2D*) fPion_templates->Get("had_etaB")  ;
52 <    fpion_ho_etaB    = (TH2D*) fPion_templates->Get("ho_etaB")   ;
53 <    fpion_had_etaTpl = (TH2D*) fPion_templates->Get("had_etaTpl");
54 <    fpion_em_etaEpl  = (TH2D*) fPion_templates->Get("em_etaEpl") ;
55 <    fpion_had_etaEpl = (TH2D*) fPion_templates->Get("had_etaEpl");
56 <    fmuon_em_etaEmi  = (TH2D*) fMuon_templates->Get("em_etaEmi") ;
57 <    fmuon_had_etaEmi = (TH2D*) fMuon_templates->Get("had_etaEmi");
58 <    fmuon_had_etaTmi = (TH2D*) fMuon_templates->Get("had_etaTmi");
59 <    fmuon_em_etaB    = (TH2D*) fMuon_templates->Get("em_etaB")   ;
60 <    fmuon_had_etaB   = (TH2D*) fMuon_templates->Get("had_etaB")  ;
61 <    fmuon_ho_etaB    = (TH2D*) fMuon_templates->Get("ho_etaB")   ;
62 <    fmuon_had_etaTpl = (TH2D*) fMuon_templates->Get("had_etaTpl");
63 <    fmuon_em_etaEpl  = (TH2D*) fMuon_templates->Get("em_etaEpl");
64 <    fmuon_had_etaEpl = (TH2D*) fMuon_templates->Get("had_etaEpl");
65 <
66 <    fpion_em_etaEmi ->SetDirectory(0);
67 <    fpion_had_etaEmi->SetDirectory(0);
68 <    fpion_had_etaTmi->SetDirectory(0);
69 <    fpion_em_etaB   ->SetDirectory(0);
70 <    fpion_had_etaB  ->SetDirectory(0);
71 <    fpion_ho_etaB   ->SetDirectory(0);
72 <    fpion_had_etaTpl->SetDirectory(0);
73 <    fpion_em_etaEpl ->SetDirectory(0);  
74 <    fpion_had_etaEpl->SetDirectory(0);  
75 <    fmuon_em_etaEmi ->SetDirectory(0);  
76 <    fmuon_had_etaEmi->SetDirectory(0);  
77 <    fmuon_had_etaTmi->SetDirectory(0);  
78 <    fmuon_em_etaB   ->SetDirectory(0);  
79 <    fmuon_had_etaB  ->SetDirectory(0);  
80 <    fmuon_ho_etaB   ->SetDirectory(0);  
81 <    fmuon_had_etaTpl->SetDirectory(0);  
82 <    fmuon_em_etaEpl ->SetDirectory(0);  
83 <    fmuon_had_etaEpl->SetDirectory(0);  
84 <    fPion_templates->Close();
85 <    fMuon_templates->Close();
86 <    delete fPion_templates;
87 <    delete fMuon_templates;
88 <  }
89 <  double lEta = -1.; double lP = -1;
90 <  double lEM  = -5.;      double lHad = 0;      double lHO = 0;
91 <  lEta = iMuon->Eta();
92 <  lP   = iMuon->P();
93 <  if(lP >= 2000.) lP = 1999.9;
94 <  if(!iEMSpecial || iMuon->EmEnergy() != 0.) lEM  = iMuon->EmEnergy();
95 <  lHad = iMuon->HadEnergy();
96 <  lHO  = iMuon->HoEnergy();
97 <  if(lP < 0. )           return 0.5;
98 <  if(fabs(lEta) >  2.5 ) return 0.5;
99 <  TH2D* lTMuonHad = NULL;
100 <  TH2D* lTPionHad = NULL;
101 <  TH2D* lTMuonHo  = NULL;
102 <  TH2D* lTPionHo  = NULL;
103 <  TH2D* lTMuonEm  = NULL;
104 <  TH2D* lTPionEm  = NULL;
105 <  
106 <  if(fabs(lEta) >=  1.27) {
107 <    if(iCorrectedHCAL) lHad *= 1.8/2.2;
108 <    if(lEta > 0) {
21 >  fmuon_had_etaEpl(0),
22 >  fpion_em_etaEmi(0),
23 >  fpion_had_etaEmi(0),
24 >  fpion_had_etaTmi(0),
25 >  fpion_em_etaB(0),
26 >  fpion_had_etaB(0),
27 >  fpion_ho_etaB(0),
28 >  fpion_had_etaTpl(0),
29 >  fpion_em_etaEpl(0),
30 >  fpion_had_etaEpl(0)
31 > {
32 >  // Constructor.
33 >
34 >  if (mutemp && pitemp)
35 >    Init(mutemp, pitemp);
36 > }
37 >
38 > //--------------------------------------------------------------------------------------------------
39 > MuonTools::~MuonTools()
40 > {
41 >  // Destructor.
42 >
43 >  DeleteHistos();
44 > }
45 >
46 > //--------------------------------------------------------------------------------------------------
47 > void MuonTools::DeleteHistos()
48 > {
49 >  // Delete histograms.
50 >
51 >  if (fIsInit) {
52 >    delete fpion_em_etaEmi;
53 >    delete fpion_had_etaEmi;
54 >    delete fpion_had_etaTmi;
55 >    delete fpion_em_etaB;
56 >    delete fpion_had_etaB;
57 >    delete fpion_ho_etaB;
58 >    delete fpion_had_etaTpl;
59 >    delete fpion_em_etaEpl;
60 >    delete fpion_had_etaEpl;
61 >    delete fmuon_em_etaEmi;
62 >    delete fmuon_had_etaEmi;
63 >    delete fmuon_had_etaTmi;
64 >    delete fmuon_em_etaB;
65 >    delete fmuon_had_etaB;
66 >    delete fmuon_ho_etaB;
67 >    delete fmuon_had_etaTpl;
68 >    delete fmuon_em_etaEpl;
69 >    delete fmuon_had_etaEpl;
70 >    fpion_em_etaEmi  = 0;
71 >    fpion_had_etaEmi = 0;
72 >    fpion_had_etaTmi = 0;
73 >    fpion_em_etaB    = 0;
74 >    fpion_had_etaB   = 0;
75 >    fpion_ho_etaB    = 0;
76 >    fpion_had_etaTpl = 0;
77 >    fpion_em_etaEpl  = 0;
78 >    fpion_had_etaEpl = 0;
79 >    fmuon_em_etaEmi  = 0;
80 >    fmuon_had_etaEmi = 0;
81 >    fmuon_had_etaTmi = 0;
82 >    fmuon_em_etaB    = 0;
83 >    fmuon_had_etaB   = 0;
84 >    fmuon_ho_etaB    = 0;
85 >    fmuon_had_etaTpl = 0;
86 >    fmuon_em_etaEpl  = 0;
87 >    fmuon_had_etaEpl = 0;
88 >    fIsInit = kFALSE;
89 >  }
90 > }
91 >
92 > //--------------------------------------------------------------------------------------------------
93 > Double_t MuonTools::GetCaloCompatability(const Muon *iMuon,
94 >                                         Bool_t iEMSpecial, Bool_t iCorrectedHCAL) const
95 > {
96 >  // Get calo compatibility value for given muon based on calorimeter templates.
97 >  // If iEMSpecial is true, then a use different arrangement of ECAL for compatibility.
98 >
99 >  Double_t lEta = iMuon->Eta();
100 >  Double_t aEta = TMath::Abs(lEta);
101 >  if (aEta > 2.5)
102 >    return 0.5;
103 >
104 >  Double_t lP = iMuon->P();
105 >  if (lP >= 2000.)
106 >    lP = 1999.9;
107 >  if(lP < 0. )          
108 >    return 0.5;
109 >
110 >  Double_t lEM  = -5.;      
111 >  if (!iEMSpecial || iMuon->EmEnergy() != 0.)
112 >    lEM  = iMuon->EmEnergy();
113 >
114 >  Double_t lHad = iMuon->HadEnergy();
115 >  Double_t lHO = iMuon->HoEnergy();;
116 >
117 >  TH2D *lTMuonHad = 0;
118 >  TH2D *lTPionHad = 0;
119 >  TH2D *lTMuonHo  = 0;
120 >  TH2D *lTPionHo  = 0;
121 >  TH2D *lTMuonEm  = 0;
122 >  TH2D *lTPionEm  = 0;
123 >    
124 >  if (aEta >= 1.27) {
125 >  if (iCorrectedHCAL)
126 >      lHad *= 1.8/2.2;
127 >    if (lEta > 0) {
128        lTPionHad = fpion_had_etaEpl;
129        lTMuonHad = fmuon_had_etaEpl;
130      } else {
# Line 114 | Line 132 | double MuonTools::getCaloCompatability(m
132        lTMuonHad = fmuon_had_etaEmi;
133      }
134    }
135 <  if(fabs(lEta) <  1.27  && fabs(lEta) >=  1.1 ) {
136 <    if(iCorrectedHCAL)    lHad *= (1.8/(-2.2*fabs(lEta)+5.5));
137 <    if(lEta > 0) {
135 >
136 >  if (aEta < 1.27 && aEta >= 1.1) {
137 >    if (iCorrectedHCAL)    
138 >      lHad *= (1.8/(-2.2*aEta+5.5));
139 >    if (lEta > 0) {
140        lTPionHad  = fpion_had_etaTpl;
141        lTMuonHad  = fmuon_had_etaTpl;
142      } else {
# Line 124 | Line 144 | double MuonTools::getCaloCompatability(m
144        lTMuonHad  = fmuon_had_etaTmi;
145      }
146    }
147 <  if(fabs(lEta) <  1.1) {
148 <    if(iCorrectedHCAL)    lHad *= sin(2*atan(exp(iMuon->Eta())));
147 >
148 >  if (aEta < 1.1) {
149 >    if(iCorrectedHCAL)    
150 >      lHad *= TMath::Sin(2*TMath::ATan(TMath::Exp(lEta)));
151      lTPionHad  = fpion_had_etaB;
152      lTMuonHad  = fmuon_had_etaB;
153    }
154 <  if(lEta >  1.479  ) {
155 <    lTPionEm  = fpion_em_etaEpl;
156 <    lTMuonEm  = fmuon_em_etaEpl;
154 >  if (lEta > 1.479) {
155 >    lTPionEm = fpion_em_etaEpl;
156 >    lTMuonEm = fmuon_em_etaEpl;
157    }
158 <  if(fabs(lEta) <=  1.479) {
158 >  if (aEta <= 1.479) {
159      lTPionEm  = fpion_em_etaB;
160      lTMuonEm  = fmuon_em_etaB;
161    }
162 <  if(lEta < -1.479 ) {
162 >  if (lEta < -1.479) {
163      lTPionEm  = fpion_em_etaEmi;
164      lTMuonEm  = fmuon_em_etaEmi;
165    }
166 <  if(fabs(lEta) < 1.28) {
166 >  if (aEta < 1.28) {
167      lTPionHo  = fpion_ho_etaB;
168      lTMuonHo  = fmuon_ho_etaB;
169    }
170    
171 <  double lPBX = 1.;     double lPSX = 1.;
172 <  double lPBY = 1.;     double lPSY = 1.;
173 <  double lPBZ = 1.;     double lPSZ = 1.;
174 <  if(!overflow(lTPionEm, lP,lEM))  lPBX =  lTPionEm ->GetBinContent(lTPionEm ->GetXaxis()->FindBin(lP),lTPionEm ->GetYaxis()->FindBin(lEM) );
175 <  if(!overflow(lTPionHad,lP,lHad)) lPBY =  lTPionHad->GetBinContent(lTPionHad->GetXaxis()->FindBin(lP),lTPionHad->GetYaxis()->FindBin(lHad));
176 <  if(!overflow(lTPionHo, lP,lHO))  lPBZ =  lTPionHo ->GetBinContent(lTPionHo ->GetXaxis()->FindBin(lP),lTPionHo ->GetYaxis()->FindBin(lHO) );
177 <  if(!overflow(lTMuonEm, lP,lEM )) lPSX =  lTMuonEm ->GetBinContent(lTMuonEm ->GetXaxis()->FindBin(lP),lTMuonEm ->GetYaxis()->FindBin(lEM) );
178 <  if(!overflow(lTMuonHad,lP,lHad)) lPSY =  lTMuonHad->GetBinContent(lTMuonHad->GetXaxis()->FindBin(lP),lTMuonHad->GetYaxis()->FindBin(lHad));
179 <  if(!overflow(lTMuonHo ,lP,lHO))  lPSZ =  lTMuonHo ->GetBinContent(lTMuonHo ->GetXaxis()->FindBin(lP),lTMuonHo ->GetYaxis()->FindBin(lHO) );
180 <  
181 <  if(lPSX == 0. || lPBX == 0. || (lEM <= 0. && !iEMSpecial)) {lPSX = 1.; lPBX = 1.;}
182 <  if(lPSY == 0. || lPBY == 0. || lHad == 0.) {lPSY = 1.; lPBY = 1.;}
183 <  if(lPSZ == 0. || lPBZ == 0. || lHO  == 0.) {lPSZ = 1.; lPBZ = 1.;}
184 <  if((lPSX*lPSY*lPSZ+lPBX*lPBY*lPBZ) > 0.) return lPSX*lPSY*lPSZ/(lPSX*lPSY*lPSZ+lPBX*lPBY*lPBZ);
171 >  Double_t lPBX = 1.;    
172 >  Double_t lPSX = 1.;
173 >  Double_t lPBY = 1.;    
174 >  Double_t lPSY = 1.;
175 >  Double_t lPBZ = 1.;    
176 >  Double_t lPSZ = 1.;
177 >  if (!Overflow(lTPionEm, lP,lEM))  
178 >    lPBX = lTPionEm ->GetBinContent(lTPionEm ->GetXaxis()->FindBin(lP),
179 >                                     lTPionEm ->GetYaxis()->FindBin(lEM));
180 >  if (!Overflow(lTPionHad,lP,lHad))
181 >    lPBY = lTPionHad->GetBinContent(lTPionHad->GetXaxis()->FindBin(lP),
182 >                                     lTPionHad->GetYaxis()->FindBin(lHad));
183 >  if (!Overflow(lTPionHo, lP,lHO))  
184 >    lPBZ = lTPionHo ->GetBinContent(lTPionHo ->GetXaxis()->FindBin(lP),
185 >                                     lTPionHo ->GetYaxis()->FindBin(lHO));
186 >  if (!Overflow(lTMuonEm, lP,lEM ))
187 >    lPSX = lTMuonEm ->GetBinContent(lTMuonEm ->GetXaxis()->FindBin(lP),
188 >                                     lTMuonEm ->GetYaxis()->FindBin(lEM));
189 >  if (!Overflow(lTMuonHad,lP,lHad))
190 >    lPSY = lTMuonHad->GetBinContent(lTMuonHad->GetXaxis()->FindBin(lP),
191 >                                    lTMuonHad->GetYaxis()->FindBin(lHad));
192 >  if (!Overflow(lTMuonHo ,lP,lHO))  
193 >    lPSZ =  lTMuonHo ->GetBinContent(lTMuonHo ->GetXaxis()->FindBin(lP),
194 >                                     lTMuonHo ->GetYaxis()->FindBin(lHO));
195 >  
196 >  if (lPSX == 0. || lPBX == 0. || (lEM <= 0. && !iEMSpecial)) {
197 >    lPSX = 1.;
198 >    lPBX = 1.;
199 >  }
200 >  if (lPSY == 0. || lPBY == 0. || lHad == 0.) {
201 >    lPSY = 1.;
202 >    lPBY = 1.;
203 >  }
204 >  if (lPSZ == 0. || lPBZ == 0. || lHO  == 0.) {
205 >    lPSZ = 1.;
206 >    lPBZ = 1.;
207 >  }
208 >  if ((lPSX*lPSY*lPSZ+lPBX*lPBY*lPBZ) > 0.)
209 >    return lPSX*lPSY*lPSZ/(lPSX*lPSY*lPSZ+lPBX*lPBY*lPBZ);
210 >
211    return 0.5;
212   }
213  
214 < bool MuonTools::isGood(mithep::Muon *iMuon,selection iSelection) {
215 <  double lVal = 0;
216 <  switch(iSelection) {
217 <  case AllArbitrated:
218 <    if(iMuon->StandaloneTrk() != 0 || iMuon->GlobalTrk()!= 0)  return true;
219 <    if(iMuon->NSegments() > 0) return true;
220 <    return false;
221 <    break;
222 <  case PromptTight:
223 <    return promptTight(-1,iMuon);
224 <    break;
225 <   case TMOneStationLoose:
226 <     return TMOneStation(iMuon,99999,999999);
227 <     break;
228 <  case TMOneStationTight:
229 <    return TMOneStation(iMuon);
230 <    break;
231 <  case TMLastStationLoose:
232 <    return TMLastStation(iMuon,999999,999999);
233 <    break;
234 <  case TMLastStationTight:
235 <    return TMLastStation(iMuon);
236 <    break;
237 <  case TM2DCompatibilityLoose:
238 <    lVal             = 1.2*getSegmentCompatability(iMuon);
239 <    if(lVal/1.2 == 0.5) return false;
240 <    lVal += 0.8*getCaloCompatability(iMuon,true,true);
241 <    if(lVal > 0.7) return true;
242 <    return false;
243 <    break;
244 <  case TM2DCompatibilityTight:
245 <    lVal             = 1.2*getSegmentCompatability(iMuon);
246 <    if(lVal/1.2 == 0.5) return false;
247 <    lVal += 0.8*getCaloCompatability(iMuon,true,true);
248 <    if(lVal > 1.0) return true;
249 <    return false;
250 <    break;
251 <  default:
252 <    return false;
214 > //--------------------------------------------------------------------------------------------------
215 > Bool_t MuonTools::Init(const char *mutemp, const char *pitemp)
216 > {
217 >  // Read histograms from given files.
218 >
219 >  if (fIsInit) {
220 >    DeleteHistos();
221 >  }
222 >
223 >  TDirectory::TContext context(0);
224 >
225 >  TFile *muon_templates = TFile::Open(mutemp);
226 >  if (!muon_templates) {
227 >    Fatal("Init", "Could not open file %s", mutemp);
228 >    return kFALSE;
229 >  }
230 >  fmuon_em_etaEmi  = LoadHisto("em_etaEmi",  muon_templates);
231 >  fmuon_had_etaEmi = LoadHisto("had_etaEmi", muon_templates);
232 >  fmuon_had_etaTmi = LoadHisto("had_etaTmi", muon_templates);
233 >  fmuon_em_etaB    = LoadHisto("em_etaB",    muon_templates);
234 >  fmuon_had_etaB   = LoadHisto("had_etaB",   muon_templates);
235 >  fmuon_ho_etaB    = LoadHisto("ho_etaB",    muon_templates);
236 >  fmuon_had_etaTpl = LoadHisto("had_etaTpl", muon_templates);
237 >  fmuon_em_etaEpl  = LoadHisto("em_etaEpl",  muon_templates);
238 >  fmuon_had_etaEpl = LoadHisto("had_etaEpl", muon_templates);
239 >  muon_templates->Close();
240 >  delete muon_templates;
241 >
242 >  TFile *pion_templates = TFile::Open(pitemp);
243 >  if (!pion_templates) {
244 >    Fatal("Init", "Could not open file %s", pitemp);
245 >    return kFALSE;
246 >  }
247 >
248 >  fpion_em_etaEmi  = LoadHisto("em_etaEmi",  pion_templates);
249 >  fpion_had_etaEmi = LoadHisto("had_etaEmi", pion_templates);
250 >  fpion_had_etaTmi = LoadHisto("had_etaTmi", pion_templates);
251 >  fpion_em_etaB    = LoadHisto("em_etaB",    pion_templates);
252 >  fpion_had_etaB   = LoadHisto("had_etaB",   pion_templates);
253 >  fpion_ho_etaB    = LoadHisto("ho_etaB",    pion_templates);
254 >  fpion_had_etaTpl = LoadHisto("had_etaTpl", pion_templates);
255 >  fpion_em_etaEpl  = LoadHisto("em_etaEpl",  pion_templates);
256 >  fpion_had_etaEpl = LoadHisto("had_etaEpl", pion_templates);
257 >  pion_templates->Close();
258 >  delete pion_templates;
259 >
260 >  fIsInit = kTRUE;
261 >  return kTRUE;
262 > }
263 >
264 > //--------------------------------------------------------------------------------------------------
265 > Bool_t MuonTools::IsGood(const mithep::Muon *iMuon, ESelType iSel) const
266 > {
267 >  // Return true if given muon qualifies given selection criterium.
268 >
269 >  Double_t tm2dcut = 0.;
270 >
271 >  switch(iSel) {
272 >    case kAllArbitrated:
273 >      if (iMuon->StandaloneTrk() != 0 || iMuon->GlobalTrk()!= 0)  
274 >        return kTRUE;
275 >      if (iMuon->NSegments() > 0)
276 >        return kTRUE;
277 >      break;
278 >    case kPromptTight:
279 >      return iMuon->PromptTight(Muon::kAny);
280 >      break;
281 >    case kTMOneStationLoose:
282 >      return iMuon->TMOneStation(999999,999999);
283 >      break;
284 >    case kTMOneStationTight:
285 >      return iMuon->TMOneStation();
286 >      break;
287 >    case kTMLastStationLoose:
288 >      return iMuon->TMLastStation(999999,999999);
289 >      break;
290 >    case kTMLastStationTight:
291 >      return iMuon->TMLastStation();
292 >      break;
293 >    case kTM2DCompatibilityLoose:
294 >      tm2dcut = 0.7;
295 >      break;
296 >    case kTM2DCompatibilityTight:
297 >      tm2dcut = 1.0;
298 >      break;
299 >    default:
300 >      return kFALSE;
301 >      break;
302 >  }
303 >
304 >  Double_t lVal = GetSegmentCompatability(iMuon);
305 >  if (lVal == 0.5) // exclude this border case
306 >    return kFALSE;
307 >
308 >  lVal *= 1.2;
309 >  lVal += 0.8*GetCaloCompatability(iMuon,kTRUE,kTRUE);
310 >  if (lVal > tm2dcut)
311 >    return kTRUE;
312 >
313 >  return kFALSE;
314 > }
315 >
316 > //--------------------------------------------------------------------------------------------------
317 > Double_t MuonTools::GetSegmentCompatability(const mithep::Muon *iMuon) const
318 > {
319 >  // Get segment compatability for given muon based on likelihood of well defined
320 >  // track through chambers.
321 >
322 >  Int_t lNStationsCrossed = 0;
323 >  Int_t lNStationsSegment = 0;
324 >  
325 >  Int_t lStSegmentmatch[8];
326 >  Int_t lStCrossed[8];
327 >  Double_t lStBoundary[8];
328 >
329 >  Double_t lWeight  = 0.;
330 >  for (Int_t i0 = 0; i0 < 8; ++i0) {
331 >    lStBoundary[i0] = 0.;
332 >    if(iMuon->GetTrackDist(i0) < 999999. ) {
333 >      lNStationsCrossed++;
334 >      lStCrossed[i0]  = 1;
335 >      if (iMuon->GetTrackDist(i0) > -10. )
336 >        lStBoundary[i0] = iMuon->GetTrackDist(i0);
337 >    } else
338 >      lStCrossed[i0]  = 0;
339 >
340 >    if(iMuon->GetDX(i0) < 999999.) {
341 >      lNStationsSegment++;
342 >      lStSegmentmatch[i0] = 1;
343 >    } else
344 >      lStSegmentmatch[i0] = 0;
345 >
346 >  }
347 >
348 >  if (lNStationsCrossed == 0)
349 >    return 0.5;
350 >
351 >  Double_t lStWeight[8];
352 >  Int_t lPCross = -1;
353 >  const Double_t lAtWeight = 0.5;
354 >  for (Int_t i0 = 0; i0< 8; ++i0) {
355 >    lStWeight[i0] = 0;
356 >    if (lStCrossed[i0] > 0) {
357 >      lPCross++;
358 >
359 >      switch (lNStationsCrossed) {
360 >        case 1 :
361 >          lStWeight[i0] =  1.;
362 >          break;
363 >        case 2 :
364 >          if (lPCross == 0 )
365 >            lStWeight[i0] = 0.33;
366 >          else
367 >            lStWeight[i0] = 0.67;
368 >          break;
369 >        case 3 :
370 >          if (lPCross == 0)
371 >            lStWeight[i0] = 0.23;
372 >          else if (lPCross == 1)
373 >            lStWeight[i0] = 0.33;
374 >          else
375 >            lStWeight[i0] = 0.44;
376 >          break;
377 >        case 4 :
378 >          if (lPCross == 0)
379 >            lStWeight[i0] = 0.10;
380 >          else if (lPCross == 1)
381 >            lStWeight[i0] = 0.20;
382 >          else if (lPCross == 2)
383 >            lStWeight[i0] = 0.30;
384 >          else                    
385 >            lStWeight[i0] = 0.40;
386 >          break;
387 >        default :
388 >          lStWeight[i0] = 1./lNStationsCrossed;
389 >      }
390 >    
391 >      if (lStSegmentmatch[i0] <= 0 && lStBoundary[i0] != 0.)
392 >        lStWeight[i0] *= lAtWeight*0.5*(TMath::Erf(lStBoundary[i0]/6.)+1.);
393 >      else if (lStSegmentmatch[i0] <= 0 && lStBoundary[i0] == 0)
394 >        lStWeight[i0] = 0.;
395 >      
396 >      if (lStSegmentmatch[i0] > 0) {
397 >        Double_t lP2X = TMath::Power(iMuon->GetPullX(i0),2.);
398 >        Double_t lP2Y = TMath::Power(iMuon->GetPullY(i0),2.);
399 >        Double_t lD2X = TMath::Power(iMuon->GetDX(i0),2.);
400 >        Double_t lD2Y = TMath::Power(iMuon->GetDY(i0),2.);
401 >        if (iMuon->GetDY(i0) < 999999 && iMuon->GetDX(i0) < 999999)
402 >          lStWeight[i0] *= SigWeight(TMath::Sqrt(lD2X+lD2Y),TMath::Sqrt(lP2X+lP2Y));
403 >        else if (iMuon->GetDY(i0) >= 999999 && i0 < 4)
404 >          lStWeight[i0] *= SigWeight(iMuon->GetDX(i0),iMuon->GetPullX(i0));
405 >        else if(i0 < 4)
406 >          lStWeight[i0] *= SigWeight(iMuon->GetDY(i0),iMuon->GetPullY(i0));
407 >      }
408 >    }
409 >    lWeight += lStWeight[i0];
410 >  }
411 >
412 >  return lWeight;
413 > }
414 >
415 > //--------------------------------------------------------------------------------------------------
416 > TH2D *MuonTools::LoadHisto(const char *name, TFile *file) const
417 > {
418 >  // Load histogram with given name from given file and return it.
419 >
420 >  TH2D *ret = dynamic_cast<TH2D*>(file->Get(name));
421 >  if (!ret) {
422 >    Fatal("LoadHisto", "Could not load histogram %s from file %s", name, file->GetName());
423 >    return 0;
424 >  }
425 >  ret->SetDirectory(0);
426 >  return ret;
427 > }
428 > //--------------------------------------------------------------------------------------------------
429 > Bool_t MuonTools::PassD0Cut(const Muon *mu, const VertexCol *vertices, Double_t fD0Cut, Int_t nVertex)
430 > {
431 >  Bool_t d0cut = kFALSE;
432 >  const Track *mt = mu->BestTrk();
433 >  if (!mt) return kFALSE;
434 >
435 >  if( nVertex >= (int) vertices->GetEntries() )
436 >    nVertex = vertices->GetEntries() - 1;
437 >
438 >  Double_t d0_real = 1e30;
439 >  if(nVertex >= 0) d0_real = TMath::Abs(mt->D0Corrected(*vertices->At(nVertex)));
440 >  else            {
441 >    Double_t distVtx = 999.0;
442 >    Int_t closestVtx = 0;
443 >    for(UInt_t nv=0; nv<vertices->GetEntries(); nv++){
444 >      double dz = TMath::Abs(mt->DzCorrected(*vertices->At(nv)));
445 >      if(dz < distVtx) {
446 >        distVtx    = dz;
447 >        closestVtx = nv;
448 >      }
449 >    }
450 >    d0_real = TMath::Abs(mt->D0Corrected(*vertices->At(closestVtx)));
451 >  }
452 >  if(d0_real < fD0Cut) d0cut = kTRUE;
453 >  
454 >  return d0cut;
455 > }
456 >
457 > //--------------------------------------------------------------------------------------------------
458 > Bool_t MuonTools::PassD0Cut(const Muon *mu, const BeamSpotCol *beamspots, Double_t fD0Cut)
459 > {
460 >  Bool_t d0cut = kFALSE;
461 >  const Track *mt = mu->BestTrk();
462 >  if (!mt) return kFALSE;
463 >
464 >  // d0 cut
465 >  Double_t d0_real = 99999;
466 >  for(UInt_t i0 = 0; i0 < beamspots->GetEntries(); i0++) {
467 >    Double_t pD0 = mt->D0Corrected(*beamspots->At(i0));
468 >    if(TMath::Abs(pD0) < TMath::Abs(d0_real)) d0_real = TMath::Abs(pD0);
469 >  }
470 >  if(d0_real < fD0Cut) d0cut = kTRUE;
471 >  
472 >  return d0cut;
473 > }
474 >
475 > //--------------------------------------------------------------------------------------------------
476 > Bool_t MuonTools::PassDZCut(const Muon *mu, const VertexCol *vertices, Double_t fDZCut, Int_t nVertex)
477 > {
478 >  Bool_t dzcut = kFALSE;
479 >  const Track *mt = mu->BestTrk();
480 >  if (!mt) return kFALSE;
481 >
482 >  if( nVertex >= (int) vertices->GetEntries() )
483 >    nVertex = vertices->GetEntries() - 1;
484 >
485 >  Double_t distVtx = 999.0;
486 >  if(nVertex >= 0) distVtx = TMath::Abs(mt->DzCorrected(*vertices->At(nVertex)));
487 >  else {
488 >    for(UInt_t nv=0; nv<vertices->GetEntries(); nv++){
489 >      double dz = TMath::Abs(mt->DzCorrected(*vertices->At(nv)));
490 >      if(dz < distVtx) {
491 >        distVtx = dz;
492 >      }
493 >    }
494 >  }
495 >
496 >  if(distVtx < fDZCut) dzcut = kTRUE;
497 >  
498 >  return dzcut;
499 > }
500 >
501 > //--------------------------------------------------------------------------------------------------
502 > Bool_t MuonTools::PassSoftMuonCut(const Muon *mu, const VertexCol *vertices, const Double_t fDZCut,
503 >                                  const Bool_t applyIso)
504 > {
505 >  if(mu->Pt() <= 3.0) return kFALSE;
506 >
507 >  if(!mu->IsTrackerMuon()) return kFALSE;
508 >  
509 >  if(!mu->Quality().Quality(MuonQuality::TMLastStationAngTight)) return kFALSE;
510 >
511 >  if(mu->BestTrk()->NHits() <= 10) return kFALSE;
512 >
513 >  if(!PassD0Cut(mu, vertices, 0.2, 0)) return kFALSE;
514 >
515 >  if(!PassDZCut(mu, vertices, fDZCut, 0)) return kFALSE;
516 >
517 >  if(applyIso == kTRUE){
518 >    Double_t totalIso = 1.0 * mu->IsoR03SumPt() +
519 >                        1.0 * mu->IsoR03EmEt() +
520 >                        1.0 * mu->IsoR03HadEt();
521 >    if (totalIso < (mu->Pt()*0.10) && mu->Pt() > 20.0) return kFALSE;
522    }
523 <  return false;
523 >
524 >  return kTRUE;
525   }
526 +
527 + Double_t MuonTools::MuonEffectiveArea(EMuonEffectiveAreaType type, Double_t Eta,
528 +                                      EMuonEffectiveAreaTarget EffectiveAreaTarget) {
529 +
530 +  Double_t EffectiveArea = 0;
531 +  if (fabs(Eta) < 1.0) {
532 +    if (type == kMuChargedIso03) EffectiveArea = 0.000;
533 +    if (type == kMuNeutralIso03) EffectiveArea = 0.080;
534 +    if (type == kMuChargedIso04) EffectiveArea = 0.000;
535 +    if (type == kMuNeutralIso04) EffectiveArea = 0.163;
536 +    if (type == kMuHadEnergy)    EffectiveArea = 0.000;
537 +    if (type == kMuHoEnergy)     EffectiveArea = 0.000;
538 +    if (type == kMuEmEnergy)     EffectiveArea = 0.000;
539 +    if (type == kMuHadS9Energy)  EffectiveArea = 0.016;
540 +    if (type == kMuHoS9Energy)   EffectiveArea = 0.000;
541 +    if (type == kMuEmS9Energy)   EffectiveArea = 0.000;
542 +    if (type == kMuTrkIso03)     EffectiveArea = 0.000;
543 +    if (type == kMuEMIso03)      EffectiveArea = 0.080;
544 +    if (type == kMuHadIso03)     EffectiveArea = 0.025;
545 +    if (type == kMuTrkIso05)     EffectiveArea = 0.000;
546 +    if (type == kMuEMIso05)      EffectiveArea = 0.290;
547 +    if (type == kMuHadIso05)     EffectiveArea = 0.091;
548 +  } else if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) {
549 +    if (type == kMuChargedIso03) EffectiveArea = 0.000;
550 +    if (type == kMuNeutralIso03) EffectiveArea = 0.083;
551 +    if (type == kMuChargedIso04) EffectiveArea = 0.000;
552 +    if (type == kMuNeutralIso04) EffectiveArea = 0.168;
553 +    if (type == kMuHadEnergy)    EffectiveArea = 0.005;
554 +    if (type == kMuHoEnergy)     EffectiveArea = 0.000;
555 +    if (type == kMuEmEnergy)     EffectiveArea = 0.000;
556 +    if (type == kMuHadS9Energy)  EffectiveArea = 0.041;
557 +    if (type == kMuHoS9Energy)   EffectiveArea = 0.000;
558 +    if (type == kMuEmS9Energy)   EffectiveArea = 0.000;
559 +    if (type == kMuTrkIso03)     EffectiveArea = 0.000;
560 +    if (type == kMuEMIso03)      EffectiveArea = 0.043;
561 +    if (type == kMuHadIso03)     EffectiveArea = 0.028;
562 +    if (type == kMuTrkIso05)     EffectiveArea = 0.000;
563 +    if (type == kMuEMIso05)      EffectiveArea = 0.184;
564 +    if (type == kMuHadIso05)     EffectiveArea = 0.106;
565 +  } else if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) {
566 +    if (type == kMuChargedIso03) EffectiveArea = 0.000;
567 +    if (type == kMuNeutralIso03) EffectiveArea = 0.060;
568 +    if (type == kMuChargedIso04) EffectiveArea = 0.000;
569 +    if (type == kMuNeutralIso04) EffectiveArea = 0.131;
570 +    if (type == kMuHadEnergy)    EffectiveArea = 0.020;
571 +    if (type == kMuHoEnergy)     EffectiveArea = 0.000;
572 +    if (type == kMuEmEnergy)     EffectiveArea = 0.000;
573 +    if (type == kMuHadS9Energy)  EffectiveArea = 0.072;
574 +    if (type == kMuHoS9Energy)   EffectiveArea = 0.000;
575 +    if (type == kMuEmS9Energy)   EffectiveArea = 0.000;
576 +    if (type == kMuTrkIso03)     EffectiveArea = 0.000;
577 +    if (type == kMuEMIso03)      EffectiveArea = 0.025;
578 +    if (type == kMuHadIso03)     EffectiveArea = 0.036;
579 +    if (type == kMuTrkIso05)     EffectiveArea = 0.000;
580 +    if (type == kMuEMIso05)      EffectiveArea = 0.124;
581 +    if (type == kMuHadIso05)     EffectiveArea = 0.140;
582 +  } else if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.25 ) {
583 +    if (type == kMuChargedIso03) EffectiveArea = 0.000;
584 +    if (type == kMuNeutralIso03) EffectiveArea = 0.066;
585 +    if (type == kMuChargedIso04) EffectiveArea = 0.000;
586 +    if (type == kMuNeutralIso04) EffectiveArea = 0.149;
587 +    if (type == kMuHadEnergy)    EffectiveArea = 0.056;
588 +    if (type == kMuHoEnergy)     EffectiveArea = 0.000;
589 +    if (type == kMuEmEnergy)     EffectiveArea = 0.000;
590 +    if (type == kMuHadS9Energy)  EffectiveArea = 0.148;
591 +    if (type == kMuHoS9Energy)   EffectiveArea = 0.000;
592 +    if (type == kMuEmS9Energy)   EffectiveArea = 0.000;
593 +    if (type == kMuTrkIso03)     EffectiveArea = 0.000;
594 +    if (type == kMuEMIso03)      EffectiveArea = 0.025;
595 +    if (type == kMuHadIso03)     EffectiveArea = 0.050;
596 +    if (type == kMuTrkIso05)     EffectiveArea = 0.000;
597 +    if (type == kMuEMIso05)      EffectiveArea = 0.120;
598 +    if (type == kMuHadIso05)     EffectiveArea = 0.186;
599 +  } else if (fabs(Eta) >= 2.25 && fabs(Eta) < 2.4 ) {
600 +    if (type == kMuChargedIso03) EffectiveArea = 0.000;
601 +    if (type == kMuNeutralIso03) EffectiveArea = 0.098;
602 +    if (type == kMuChargedIso04) EffectiveArea = 0.000;
603 +    if (type == kMuNeutralIso04) EffectiveArea = 0.200;
604 +    if (type == kMuHadEnergy)    EffectiveArea = 0.093;
605 +    if (type == kMuHoEnergy)     EffectiveArea = 0.000;
606 +    if (type == kMuEmEnergy)     EffectiveArea = 0.000;
607 +    if (type == kMuHadS9Energy)  EffectiveArea = 0.260;
608 +    if (type == kMuHoS9Energy)   EffectiveArea = 0.000;
609 +    if (type == kMuEmS9Energy)   EffectiveArea = 0.000;
610 +    if (type == kMuTrkIso03)     EffectiveArea = 0.000;
611 +    if (type == kMuEMIso03)      EffectiveArea = 0.027;
612 +    if (type == kMuHadIso03)     EffectiveArea = 0.060;
613 +    if (type == kMuTrkIso05)     EffectiveArea = 0.000;
614 +    if (type == kMuEMIso05)      EffectiveArea = 0.139;
615 +    if (type == kMuHadIso05)     EffectiveArea = 0.228;
616 +  }
617 +
618 +  if (EffectiveAreaTarget == kMuEANoCorr) {
619 +    return 0.0;
620 +  }
621 +  
622 +  //2012 Data Effective Areas
623 +  else if (EffectiveAreaTarget == kMuEAData2012) {
624 +            if (type == kMuGammaIsoDR0p0To0p1) {
625 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.005;
626 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.002;
627 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.005;
628 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.023;
629 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.000;
630 +      if (fabs(Eta) >= 2.3 ) EffectiveArea = 0.000;
631 +    }
632 +    if (type == kMuGammaIsoDR0p1To0p2) {
633 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.013;
634 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.007;
635 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.006;
636 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.010;
637 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.010;
638 +      if (fabs(Eta) >= 2.3 ) EffectiveArea = 0.016;
639 +    }
640 +    if (type == kMuGammaIsoDR0p2To0p3) {
641 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.027;
642 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.021;
643 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.012;
644 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.018;
645 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.019;
646 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.025;
647 +    }
648 +    if (type == kMuGammaIsoDR0p3To0p4) {
649 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.044;
650 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.031;
651 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.019;
652 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.024;
653 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.021;
654 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.040;
655 +    }
656 +    if (type == kMuGammaIsoDR0p4To0p5) {
657 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.060;
658 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.045;
659 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.027;
660 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.037;
661 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.043;
662 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.052;
663 +    }
664 +    if (type == kMuNeutralHadronIsoDR0p0To0p1) {
665 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.000;
666 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.003;
667 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.006;
668 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.000;
669 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.000;
670 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.003;
671 +    }
672 +    if (type == kMuNeutralHadronIsoDR0p1To0p2) {
673 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.005;
674 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.005;
675 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.003;
676 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.004;
677 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.002;
678 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.007;
679 +    }
680 +    if (type == kMuNeutralHadronIsoDR0p2To0p3) {
681 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.006;
682 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.009;
683 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.009;
684 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.008;
685 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.013;
686 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.015;
687 +    }
688 +    if (type == kMuNeutralHadronIsoDR0p3To0p4) {
689 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.008;
690 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.013;
691 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.013;
692 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.013;
693 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.013;
694 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.013;
695 +    }
696 +    if (type == kMuNeutralHadronIsoDR0p4To0p5) {
697 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.014;
698 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.016;
699 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.015;
700 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.024;
701 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.023;
702 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.077;
703 +    }
704 +
705 +        
706 +        
707 +    if (type == kMuGammaIso04){
708 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.50419;
709 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.30582;
710 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.19765;
711 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.28723;
712 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.52529;
713 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.48818;
714 +    }
715 +    if (type == kMuNeutralHadronIso04){
716 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.16580;
717 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.25904;
718 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.24695;
719 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.22021;
720 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.34045;
721 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.21592;
722 +    }
723 +    if (type == kMuGammaAndNeutralHadronIso04){
724 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.674;
725 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.565;
726 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.442;
727 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.515;
728 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.821;
729 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.660;
730 +    }
731 +    if (type == kMuGammaAndNeutralHadronIso03){
732 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.382;
733 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.317;
734 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.242;
735 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.326;
736 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.462;
737 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.372;
738 +    }
739 +    if (type == kMuGammaAndNeutralHadronIso04Tight){
740 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.340;
741 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.310;
742 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.315;
743 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.415;
744 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.658;
745 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.405;
746 +    }
747 +    if (type == kMuGammaAndNeutralHadronIso03Tight){
748 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.207;
749 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.183;
750 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.177;
751 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.271;
752 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.348;
753 +      if (fabs(Eta) >= 2.3 )                  EffectiveArea = 0.246;
754 +    }
755 +  }
756 +
757 +  //2011 Data Effective Areas
758 +  else if (EffectiveAreaTarget == kMuEAData2011) {
759 +    
760 +    if (type == kMuGammaIsoDR0p0To0p1) {
761 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.004;
762 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.002;
763 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.002;
764 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.000;
765 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.000;
766 +      if (fabs(Eta) >= 2.3 ) EffectiveArea = 0.005;
767 +    }
768 +    if (type == kMuGammaIsoDR0p1To0p2) {
769 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.011;
770 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.008;
771 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.005;
772 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.008;
773 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.008;
774 +      if (fabs(Eta) >= 2.3 ) EffectiveArea = 0.011;
775 +    }
776 +    if (type == kMuGammaIsoDR0p2To0p3) {
777 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.023;
778 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.016;
779 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.010;
780 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.014;
781 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.017;
782 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.021;
783 +    }
784 +    if (type == kMuGammaIsoDR0p3To0p4) {
785 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.036;
786 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.026;
787 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.017;
788 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.023;
789 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.028;
790 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.032;
791 +    }
792 +    if (type == kMuGammaIsoDR0p4To0p5) {
793 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.051;
794 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.037;
795 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.028;
796 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.033;
797 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.042;
798 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.052;
799 +    }
800 +    if (type == kMuNeutralHadronIsoDR0p0To0p1) {
801 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.002;
802 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.001;
803 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.001;
804 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.001;
805 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.005;
806 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.007;
807 +    }
808 +    if (type == kMuNeutralHadronIsoDR0p1To0p2) {
809 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.005;
810 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.008;
811 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.009;
812 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.009;
813 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.010;
814 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.014;
815 +    }
816 +    if (type == kMuNeutralHadronIsoDR0p2To0p3) {
817 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.010;
818 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.015;
819 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.017;
820 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.017;
821 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.019;
822 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.024;
823 +    }
824 +    if (type == kMuNeutralHadronIsoDR0p3To0p4) {
825 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.015;
826 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.021;
827 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.024;
828 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.032;
829 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.038;
830 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.038;
831 +    }
832 +    if (type == kMuNeutralHadronIsoDR0p4To0p5) {
833 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.020;
834 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.026;
835 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.033;
836 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.045;
837 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.051;
838 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.114;
839 +    }
840 +    /// BEGIN FROM SLIDE 11 OF  https://indico.cern.ch/getFile.py/access?contribId=1&resId=0&materialId=slides&confId=188494
841 +    /// NOTE: to be used with the rho from ALL pf candidates within |eta|<2.5
842 +    if (type == kMuGammaIso03){
843 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.049;
844 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.030;
845 +      if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.022;
846 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.034;
847 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.041;
848 +      if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.048;
849 +    }
850 +    if (type == kMuGammaIso04){
851 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.085;
852 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.052;
853 +      if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.038;
854 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.055;
855 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.070;
856 +      if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.081;
857 +    }
858 +    if (type == kMuNeutralHadronIso03){
859 +        if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.027;
860 +        if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.039;
861 +        if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.044;
862 +        if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.047;
863 +        if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.055;
864 +        if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.065;
865 +    }
866 +    if (type == kMuNeutralHadronIso04){
867 +        if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.046;
868 +        if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.067;
869 +        if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.074;
870 +        if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.083;
871 +        if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.095;
872 +        if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.105;
873 +    }
874 +    if (type == kMuGammaAndNeutralHadronIso03){
875 +        if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.076;
876 +        if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.070;
877 +        if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.067;
878 +        if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.082;
879 +        if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.097;
880 +        if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.115;
881 +    }
882 +    if (type == kMuGammaAndNeutralHadronIso04){
883 +        if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.132;
884 +        if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.5 ) EffectiveArea = 0.120;
885 +        if (fabs(Eta) >= 1.5 && fabs(Eta) < 2.0 ) EffectiveArea = 0.114;
886 +        if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.139;
887 +        if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.168;
888 +        if (fabs(Eta) >= 2.3 )                EffectiveArea = 0.189;
889 +    }
890 +    /// END FROM SLIDE 11 OF  https://indico.cern.ch/getFile.py/access?contribId=1&resId=0&materialId=slides&confId=188494
891 +
892 +    if (type == kMuGammaIso05){
893 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.05317;
894 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.03502;
895 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.03689;
896 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.05221;
897 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.06668;
898 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.0744;
899 +    }
900 +    if (type == kMuNeutralIso05) {
901 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.06408;
902 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.07557;
903 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.08864;
904 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.11492;
905 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.13784;
906 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.18745;
907 +    }
908 +  }
909 +  
910 +  //Summer11 MC Effective Areas
911 +  else if (EffectiveAreaTarget == kMuEASummer11MC) {
912 +    if (type == kMuGammaIsoDR0p0To0p1) {
913 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.000;
914 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.000;
915 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.000;
916 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.000;
917 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.000;
918 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.006;
919 +    }
920 +    if (type == kMuGammaIsoDR0p1To0p2) {
921 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.012;
922 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.007;
923 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.006;
924 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.008;
925 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.019;
926 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.015;
927 +    }
928 +    if (type == kMuGammaIsoDR0p2To0p3) {
929 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.023;
930 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.018;
931 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.013;
932 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.016;
933 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.024;
934 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.036;
935 +    }
936 +    if (type == kMuGammaIsoDR0p3To0p4) {
937 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.038;
938 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.027;
939 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.019;
940 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.033;
941 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.041;
942 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.062;
943 +    }
944 +    if (type == kMuGammaIsoDR0p4To0p5) {
945 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.055;
946 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.038;
947 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.032;
948 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.052;
949 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.066;
950 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.093;
951 +    }
952 +    if (type == kMuNeutralHadronIsoDR0p0To0p1) {
953 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.002;
954 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.005;
955 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.000;
956 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.000;
957 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.000;
958 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.003;
959 +    }
960 +    if (type == kMuNeutralHadronIsoDR0p1To0p2) {
961 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.005;
962 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.006;
963 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.009;
964 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.008;
965 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.009;
966 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.013;
967 +    }
968 +    if (type == kMuNeutralHadronIsoDR0p2To0p3) {
969 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.009;
970 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.013;
971 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.015;
972 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.016;
973 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.020;
974 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.024;
975 +    }
976 +    if (type == kMuNeutralHadronIsoDR0p3To0p4) {
977 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.012;
978 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.019;
979 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.021;
980 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.025;
981 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.030;
982 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.044;
983 +    }
984 +    if (type == kMuNeutralHadronIsoDR0p4To0p5) {
985 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.016;
986 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.026;
987 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.030;
988 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.038;
989 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.048;
990 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.118;
991 +    }
992 +  }
993 +  
994 +  //Fall11 MC Effective Areas
995 +  else if (EffectiveAreaTarget == kMuEAFall11MC) {
996 +    if (type == kMuGammaIsoDR0p0To0p1) {
997 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.004;
998 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.002;
999 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.003;
1000 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.009;
1001 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.003;
1002 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.011;
1003 +    }
1004 +    if (type == kMuGammaIsoDR0p1To0p2) {
1005 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.012;
1006 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.008;
1007 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.006;
1008 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.012;
1009 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.019;
1010 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.024;
1011 +    }
1012 +    if (type == kMuGammaIsoDR0p2To0p3) {
1013 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.026;
1014 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.020;
1015 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.012;
1016 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.022;
1017 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.027;
1018 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.034;
1019 +    }
1020 +    if (type == kMuGammaIsoDR0p3To0p4) {
1021 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.042;
1022 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.033;
1023 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.022;
1024 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.036;
1025 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.059;
1026 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.068;
1027 +    }
1028 +    if (type == kMuGammaIsoDR0p4To0p5) {
1029 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.060;
1030 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.043;
1031 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.036;
1032 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.055;
1033 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.092;
1034 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.115;
1035 +    }
1036 +    if (type == kMuNeutralHadronIsoDR0p0To0p1) {
1037 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.002;
1038 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.004;
1039 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.004;
1040 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.004;
1041 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.010;
1042 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.014;
1043 +    }
1044 +    if (type == kMuNeutralHadronIsoDR0p1To0p2) {
1045 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 )   EffectiveArea = 0.005;
1046 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.007;
1047 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.009;
1048 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 )   EffectiveArea = 0.009;
1049 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 )   EffectiveArea = 0.015;
1050 +      if (fabs(Eta) >= 2.3  )                 EffectiveArea = 0.017;
1051 +    }
1052 +    if (type == kMuNeutralHadronIsoDR0p2To0p3) {
1053 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.009;
1054 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.015;
1055 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.016;
1056 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.018;
1057 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.022;
1058 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.026;
1059 +    }
1060 +    if (type == kMuNeutralHadronIsoDR0p3To0p4) {
1061 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.013;
1062 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.021;
1063 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.026;
1064 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.032;
1065 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.037;
1066 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.042;
1067 +    }
1068 +    if (type == kMuNeutralHadronIsoDR0p4To0p5) {
1069 +      if (fabs(Eta) >= 0.0 && fabs(Eta) < 1.0 ) EffectiveArea = 0.017;
1070 +      if (fabs(Eta) >= 1.0 && fabs(Eta) < 1.479 ) EffectiveArea = 0.026;
1071 +      if (fabs(Eta) >= 1.479 && fabs(Eta) < 2.0 ) EffectiveArea = 0.035;
1072 +      if (fabs(Eta) >= 2.0 && fabs(Eta) < 2.2 ) EffectiveArea = 0.046;
1073 +      if (fabs(Eta) >= 2.2 && fabs(Eta) < 2.3 ) EffectiveArea = 0.063;
1074 +      if (fabs(Eta) >= 2.3  ) EffectiveArea = 0.135;
1075 +    }
1076 +  }
1077 +
1078 +  return EffectiveArea;  
1079 +
1080 + }
1081 +
1082 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines