Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
2cd8f5d
added muon fake rates
Aug 21, 2013
5b4d828
moved 40GeV jet veto to 20, added #jets in training ntuple
Aug 30, 2013
7d26ebc
added muon fr from EM data, copy pulls in the plots dir
Aug 30, 2013
8fe93ce
added better memory handling, added njets to kNN
Aug 30, 2013
fff50cf
added differential plots
Aug 30, 2013
ee6c41e
added differential plots, more plots
Aug 30, 2013
9c234c3
added more kNN variables and more, added muon fr from EM data
Aug 30, 2013
f83a35e
minimal error is 1%
Aug 30, 2013
fc821cc
reduce number of unused isopoints
Aug 30, 2013
daa5695
work in progress
Sep 6, 2013
d4cb248
easier to read, added 7TeV triggers for EM
Sep 9, 2013
f8d8b44
implemented fake yield uncertainty from f3 region fit
Sep 9, 2013
93077ef
updated mass range, WZ rejection, and some binning
Sep 9, 2013
c61b4db
automatically excludes missing signal samples
Sep 9, 2013
e3d5566
work in progress
Sep 9, 2013
c67bcc3
moved HWW125 from signal to background
Sep 9, 2013
e6d9e44
cleanup added trigger uncertainties
Sep 9, 2013
ae32581
updated values
Sep 9, 2013
9034776
work in progress
Sep 9, 2013
8c00453
take yield systematics from f3 region fit
Sep 9, 2013
29d6bba
updates
Sep 9, 2013
953f887
cleanup, run f3 fits first
Sep 9, 2013
2c2e896
added different file for each channels
Sep 9, 2013
bfcba59
added different file for each channels
Sep 9, 2013
664b236
added different file for each channels
Sep 9, 2013
bd26230
added different file for each channels
Sep 9, 2013
2e8d873
added different file for each channels
Sep 9, 2013
e067254
added different file for each channels
Sep 9, 2013
561df80
added different file for each channels
Sep 9, 2013
43392f6
added different file for each channels
Sep 9, 2013
7f39ca8
added different file for each channels
Sep 9, 2013
9e1c623
checks that the shapes for the limit are looking good
Sep 9, 2013
f336222
dumps and compares the luminosity of two jobids
Sep 9, 2013
d181a73
fancy plots of fake rates
Sep 9, 2013
5058192
update fake rates variables
Sep 13, 2013
e0f6f7c
update fake rates variables
Sep 13, 2013
4dbb23b
allow multiple neighbors training, update horizontal_morphing to new …
Sep 13, 2013
676da86
bugfix
Sep 13, 2013
66d7ba3
HWW treated as bkg, work in progress
Sep 13, 2013
9e2e430
more plots, better naming
Sep 13, 2013
865f7da
mass range limit put to 300
Sep 13, 2013
22b7b67
break lines, mass range limit put to 300
Sep 13, 2013
50db7e4
use only pt10 FR
Sep 13, 2013
55ce9d2
better naming, use only pt10 FR
Sep 13, 2013
7dea56b
added logging workflow control
Sep 16, 2013
3ed8c2d
added logging workflow control, and Zee control plots
Sep 16, 2013
7eda92d
bugfix
Sep 16, 2013
238caa9
better treatment of low stat bins in FR, removes empty bins
Sep 16, 2013
34c5bf7
define vars in the proper place
Sep 16, 2013
41a81ee
update
Sep 16, 2013
e13f901
update names
Sep 16, 2013
d14e78f
update
Sep 16, 2013
4fd0a64
added trig scale factor
Sep 27, 2013
2d88feb
more plots, added 7TeV trigger
Sep 27, 2013
5563021
more plots, bugfix, added trig scale factors
Sep 27, 2013
18a9f0d
more plots, added ratio under the main pad
Sep 27, 2013
b982c7e
added trigger scale factors
Sep 27, 2013
a6a8761
many changes, sorry for not having split it before
Sep 27, 2013
841df19
more plots, new shape file with 4 categories (2 f3 ones)
Sep 27, 2013
e8b4b1d
updated scale factors
Sep 27, 2013
f900cc1
changed dirs
Oct 1, 2013
e43353d
small cosmetics, no real change
Oct 1, 2013
538dc5e
added debugging (commented)
Oct 1, 2013
61c7138
even more plots
Oct 1, 2013
91e24c8
removed bjet veto
Oct 4, 2013
841692a
refactor the code. Make ZEE control plots with fake estimation from data
Oct 4, 2013
a4000e1
be complieant with new code structure. Change in enhance_wz
Oct 4, 2013
0b505b4
be complieant with new code structure. Change in enhance_wz
Oct 4, 2013
e69c9d4
change in code structure, allow 3SS objects in a dedicated region
Oct 4, 2013
3255caa
allow to plot 3SS region. Update WZ CR plotting to match current samples
Oct 4, 2013
23459df
code clean-up and add data-mc, WZ CR and 3SS plots
Oct 4, 2013
d9baf70
code clean-up and add data-mc, WZ CR and 3SS plots
Oct 4, 2013
8f74660
bugfix and reshuffle the code to make it easier to understand
Oct 4, 2013
ac30929
post sync commit. Added DR requirement, new trigger matching and Anti…
Oct 30, 2013
a632b44
half-sync commit. Added stuff to make sync easier, clened up the code…
Oct 30, 2013
d8cb356
few changes to make the three channels independent to run
Oct 30, 2013
1c01c08
Added DR cut and new trig matching for MM
Oct 30, 2013
b017a69
reshuffled the code, made sync easier
Oct 30, 2013
e314407
added options to draw ratios and stuff
Oct 30, 2013
67a9823
cleanup
Oct 30, 2013
dc8ee93
bugfix and sync improvements
Oct 30, 2013
2af281a
new naming to make channels completely independent. cluenup
Oct 30, 2013
a8ab7eb
added mc matching functions
Oct 30, 2013
2f7c9e2
test charge flip shape unc
Dec 6, 2013
d9d8f35
added sync tools
Dec 6, 2013
6c2798f
update plots
Dec 6, 2013
e4c0047
charge flip shape unc experiment
Dec 6, 2013
fbc4de8
updated plots
Dec 6, 2013
21ced83
added new sample definitions and changed fake rates regions according…
Dec 6, 2013
190f264
added new sync tools, added structure to perform second background es…
Dec 6, 2013
56a5cb0
added new sync tools, added structure to perform second background es…
Dec 6, 2013
da463df
moved cut_flow_tracker to a different location, added more debug opti…
Dec 6, 2013
6995a66
Fixed bugs in empty bing removal, added infrastructure to plots the f…
Dec 6, 2013
e69d96a
Removed unused plots, added more control flows to make fewer plots fa…
Dec 6, 2013
5cfebd1
added bug tracking tools, changed WJets MT threshold
Dec 6, 2013
5643ac3
new diboson sunbtraction plus some fancy stuff to avoid crashes in ca…
Dec 6, 2013
e8c2e46
compliant to new fake rate prescriptions
Dec 6, 2013
20e85e6
allows using different meta trees for different samples
Dec 6, 2013
9a975d1
changed env vars
Dec 9, 2013
c92b2c1
tool for keep track of the cut flow in mega scripts
Dec 9, 2013
8f003f0
dumps used xsections from the input files
Dec 9, 2013
a5fe4e5
prints an events list out of a tree
Dec 9, 2013
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ if [ -z $CONDOR_ID ]; then
fi

#Is the analysis blinded?
export blind='YES'
export blind='NO' #'YES'
export TARGET_LUMI_8TeV=19.4
export TARGET_LUMI_7TeV=4.9

export MEGAPATH='/scratch/mverzett/data':$hdfs

#check if dev area is up to date
check_git_updates.sh
4 changes: 2 additions & 2 deletions wh/ChargeFlipProbabilityEE.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ def preselection(row):
continue

evt_weight = pucorrector(row.nTruePU) * \
mcCorrectors.get_electron_corrections(row,'e1','e2')

mcCorrectors.get_electron_corrections(row,'e1','e2') *\
mcCorrectors.double_electron_trigger(row)
for iso_label in lep_id:
if not selections.lepton_id_iso(row, 'e1', iso_label):
continue
Expand Down
25 changes: 21 additions & 4 deletions wh/ControlEM.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ def begin(self):
5, -0.5, 4.5)
self.book('em' + folder, 'eVetoCicTightIso',
'Number of extra CiC tight electrons', 5, -0.5, 4.5)
self.book('em' + folder, "trig_weight" , "mva_metEt", 200, 0, 2)
self.book('em' + folder, "PU_weight" , "mva_metEt", 200, 0, 2)
self.book('em' + folder, "idIso_weight", "mva_metEt", 200, 0, 2)
self.book('em' + folder, "emMass_noweight", "m_{e#mu} (GeV)", 240, 0, 240)


def correction(self, row):
return self.pucorrector(row.nTruePU) * \
Expand All @@ -100,12 +105,20 @@ def fill_folder(x, w):
histos[x + '/eJetBtag'].Fill(row.eJetBtag, w)
histos[x + '/mJetBtag'].Fill(row.mJetBtag, w)
histos[x + '/emMass'].Fill(row.e_m_Mass, w)
histos[x + '/emMass_noweight'].Fill(row.e_m_Mass)

histos[x + '/bjetVeto'].Fill(row.bjetVeto, w)
histos[x + '/bjetCSVVeto'].Fill(row.bjetCSVVeto, w)
histos[x + '/muVetoPt5'].Fill(row.muVetoPt5, w)
histos[x + '/tauVetoPt20'].Fill(row.tauVetoPt20, w)
histos[x + '/eVetoCicTightIso'].Fill(row.eVetoCicTightIso, w)
if row.run < 2:
histos[x + "/trig_weight" ].Fill(mcCorrectors.correct_mueg_mu(row.mPt, row.mAbsEta)*
mcCorrectors.correct_mueg_e(row.ePt, row.eAbsEta) )
histos[x + "/PU_weight" ].Fill(self.pucorrector(row.nTruePU))
histos[x + "/idIso_weight"].Fill(mcCorrectors.get_muon_corrections(row,'m') *
mcCorrectors.get_electron_corrections(row,'e') )


passes_e_id_iso = self.obj2_id(row)
if row.e_m_SS and passes_e_id_iso:
Expand All @@ -122,11 +135,15 @@ def preselection(self, row):
Excludes FR object IDs and sign cut.
'''
mu17e8 = (row.mu17ele8isoPass and row.mPt >= 20) if use_iso_trigger else (row.mu17ele8Pass and row.mPt >= 20)
mu8e17 = (row.mu8ele17isoPass and row.ePt >= 20) #if use_iso_trigger else (row.mu17ele8Pass and row.mPt < 20)
mu8e17 = (row.mu8ele17isoPass and row.ePt >= 20) if use_iso_trigger else (row.mu8ele17Pass and row.mPt < 20)
if not (mu17e8 or mu8e17): return False
if not selections.muSelection(row, 'm'): return False #applies basic selection (eta, pt > 10, DZ, pixHits, jetBTag)
if not selections.eSelection(row, 'e'): return False #applies basic selection (eta, pt > 10, DZ, missingHits, jetBTag, HasConversion and chargedIdTight)
if not selections.vetos(row): return False #applies mu bjet e additional tau vetoes
#if not selections.vetos(row): return False #applies mu bjet e additional tau vetoes
if row.muVetoPt5IsoIdVtx: return False
if row.eVetoMVAIsoVtx: return False
if row.tauVetoPt20Loose3HitsVtx: return False

return True

def obj1_id(self, row):
Expand All @@ -145,9 +162,9 @@ def obj2_weight(self, row):
mu17e8 = (row.mu17ele8isoPass and row.mPt >= 20) if use_iso_trigger else (row.mu17ele8Pass and row.mPt >= 20)
fr = 0.
if mu17e8:
fr = frfits.lowpt_e_fr[subleptonId](electronJetPt=max(row.eJetPt, row.ePt), electronPt=row.ePt)
fr = frfits.lowpt_e_fr[subleptonId](electronJetPt=max(row.eJetPt, row.ePt), electronPt=row.ePt, numJets20=row.jetVeto20)
else:
fr = frfits.highpt_e_fr[subleptonId](electronJetPt=max(row.eJetPt, row.ePt),electronPt=row.ePt)
fr = frfits.highpt_e_fr[subleptonId](electronJetPt=max(row.eJetPt, row.ePt), electronPt=row.ePt, numJets20=row.jetVeto20)
return fr / (1. - fr)

def process(self):
Expand Down
56 changes: 36 additions & 20 deletions wh/ControlZEE.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ def f_(*args,**kargs):


leading_e_fr_wjets = make_weight(frfits.highpt_ee_fr[leading_iso] )
leading_e_fr_qcd = make_weight(frfits.highpt_ee_qcd_fr[leading_iso] )
leading_e_fr_qcd = None #make_weight(frfits.highpt_ee_qcd_fr[leading_iso] )
subleading_e_fr_wjets = make_weight(frfits.lowpt_ee_fr[subleading_iso] )
subleading_e_fr_qcd = make_weight(frfits.lowpt_ee_qcd_fr[subleading_iso] )
subleading_e_fr_qcd = None #make_weight(frfits.lowpt_ee_qcd_fr[subleading_iso] )

def assign_charge_weight_one_maps(dir_, row):
if "charge_weightSysUp" in dir_: return charge_flip_up_lead(row.e1AbsEta,row.e1Pt) + charge_flip_up_sub(row.e2AbsEta,row.e2Pt)
Expand All @@ -65,9 +65,10 @@ def assign_id_weight(dir_, row):
return 1
leading_fr = leading_e_fr_wjets if 'wjet_w' in dir_ else leading_e_fr_qcd
sublead_fr = subleading_e_fr_wjets if 'wjet_w' in dir_ else subleading_e_fr_qcd
if "f1f2" in dir_: return leading_fr( electronJetPt=max(row.e1JetPt, row.e1Pt), electronPt=row.e1Pt) * sublead_fr( electronJetPt=max(row.e2JetPt, row.e2Pt), electronPt=row.e2Pt )
if "f2" in dir_: return sublead_fr( electronJetPt=max(row.e2JetPt, row.e2Pt), electronPt=row.e2Pt)
if "f1" in dir_: return leading_fr( electronJetPt=max(row.e1JetPt, row.e1Pt), electronPt=row.e1Pt)
if "f1f2" in dir_: return leading_fr( electronJetPt=max(row.e1JetPt, row.e1Pt), electronPt=row.e1Pt, numJets20=row.jetVeto20) *\
sublead_fr( electronJetPt=max(row.e2JetPt, row.e2Pt), electronPt=row.e2Pt, numJets20=row.jetVeto20)
if "f2" in dir_: return sublead_fr( electronJetPt=max(row.e2JetPt, row.e2Pt), electronPt=row.e2Pt, numJets20=row.jetVeto20)
if "f1" in dir_: return leading_fr( electronJetPt=max(row.e1JetPt, row.e1Pt), electronPt=row.e1Pt, numJets20=row.jetVeto20)

class ControlZEE(MegaBase):
tree = 'ee/final/Ntuple'
Expand All @@ -88,6 +89,9 @@ def book_(dirname):
self.book(dirname, 'SCEnergy', 'electron Super Cluster energy', 500, 0, 1000)
self.book(dirname, 'SCDPhi' , 'electron Super Cluster DeltaPhi', 180, 0, math.Pi())
self.book(dirname, 'TrkMass' , 'Dielectrons invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, 'TrkMass_low' , 'Dielectrons invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, 'TrkMass_high', 'Dielectrons invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, 'TrkMass_NoWeight', 'Dielectrons invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, 'TrkMass_NOSCALE' , 'Dielectrons invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, 'SCMass' , 'Dielectrons Super Cluster invariant mass; M_{ee} [GeV];counts', 110, 40, 150)
self.book(dirname, "e1Pt" , "electron 1 Pt", 400, 0, 800)
Expand All @@ -96,10 +100,14 @@ def book_(dirname):
self.book(dirname, "e2AbsEta", "electron 2 abseta", 100, 0., 2.5)
self.book(dirname, "type1_pfMetEt", "metEt" , 300, 0, 300)
self.book(dirname, "mva_metEt", "mva_metEt", 300, 0, 300)
self.book(dirname, "trig_weight" , "mva_metEt", 200, 0, 2)
self.book(dirname, "PU_weight" , "mva_metEt", 200, 0, 2)
self.book(dirname, "idIso_weight", "mva_metEt", 200, 0, 2)


self.dirs = ['/'.join([sign,id_,weight,ch_weight]) for sign in ['os','ss']
for id_ in [h+k for h in ['p1','f1'] for k in ['p2','f2'] ]
for weight in ['','wjet_w','qcd_w']
for weight in ['','wjet_w'] #,'qcd_w']
for ch_weight in ["","charge_weight","charge_weightSysUp","charge_weightSysDwn"]
if 'f' in id_ or weight == ''
if ch_weight == '' or sign == 'os'
Expand All @@ -118,14 +126,6 @@ def book_(dirname):
self.dir_based_histograms[location] = {}
self.dir_based_histograms[location][name] = hist

def evt_weight(self, row):
if row.run > 2:
return 1.
else:
return self.pucorrector(row.nTruePU) * \
mcCorrectors.get_electron_corrections(row,'e1','e2')


def preselection(self, row):
''' Preselection applied to events.

Expand All @@ -137,44 +137,60 @@ def preselection(self, row):
if row.e1Pt < 20: return False
if not selections.eSelection(row, 'e1'): return False
if not selections.eSelection(row, 'e2'): return False
if not selections.vetos(row): return False
if row.muVetoPt5IsoIdVtx: return False
if row.eVetoMVAIsoVtx: return False
if row.tauVetoPt20Loose3HitsVtx: return False
#if not selections.vetos(row): return False
if row.e1_e2_Mass < 40: return False
if not (row.jetVeto40 >= 1): return False
return True

def obj1_id(self, row):
return selections.lepton_id_iso(row, 'e1', subleading_iso)
return selections.lepton_id_iso(row, 'e1', leading_iso)

def obj2_id(self, row):
return selections.lepton_id_iso(row, 'e2', subleading_iso)

def mc_weight(self, row):
if row.run > 2:
return 1.
return self.pucorrector(row.nTruePU) * \
mcCorrectors.get_electron_corrections(row,'e1','e2')

else:
return self.pucorrector(row.nTruePU) * \
mcCorrectors.get_electron_corrections(row,'e2') *\
mcCorrectors.electron_tight_corrections(row.e1Pt, row.e1AbsEta) *\
mcCorrectors.double_electron_trigger(row)
#'e1',
def process(self):

histos = self.dir_based_histograms
mc_weight = self.mc_weight
def fill_histos(dirname, row, weight):
mass = frfits.mass_scaler[leading_iso](row.e1_e2_Mass) if "charge_weight" in dirname else row.e1_e2_Mass
mass = frfits.default_scaler(row.e1_e2_Mass) if "charge_weight" in dirname else row.e1_e2_Mass
mass_up = frfits.default_scaler_up(row.e1_e2_Mass) if "charge_weight" in dirname else row.e1_e2_Mass
mass_dw = frfits.default_scaler_down(row.e1_e2_Mass) if "charge_weight" in dirname else row.e1_e2_Mass

histos[dirname]['ePt' ].Fill(row.e1Pt,weight)
histos[dirname]['eAbsEta' ].Fill(row.e1AbsEta,weight)
histos[dirname]['SCEnergy'].Fill(row.e1SCEnergy,weight)
histos[dirname]['ePt' ].Fill(row.e2Pt,weight)
histos[dirname]['eAbsEta' ].Fill(row.e2AbsEta,weight)
histos[dirname]['SCEnergy'].Fill(row.e2SCEnergy,weight)
histos[dirname]['TrkMass' ].Fill(mass, weight)
histos[dirname]['TrkMass_low' ].Fill(mass_dw, weight)
histos[dirname]['TrkMass_high' ].Fill(mass_up, weight)
#histos[dirname]['SCMass' ].Fill(sc_inv_mass(row),weight)
histos[dirname]["e1Pt" ].Fill(row.e1Pt,weight)
histos[dirname]["e2Pt" ].Fill(row.e2Pt,weight)
histos[dirname]["e1AbsEta"].Fill(row.e1AbsEta,weight)
histos[dirname]["e2AbsEta"].Fill(row.e2AbsEta,weight)
histos[dirname]['TrkMass_NOSCALE'].Fill(row.e1_e2_Mass, weight)
histos[dirname]['TrkMass_NoWeight'].Fill(row.e1_e2_Mass)
histos[dirname]['type1_pfMetEt'].Fill(row.type1_pfMetEt, weight)
histos[dirname]['mva_metEt'].Fill(row.mva_metEt, weight)
if row.run < 2:
histos[dirname]["trig_weight" ].Fill( self.pucorrector(row.nTruePU) )
histos[dirname]["PU_weight" ].Fill( mcCorrectors.get_electron_corrections(row,'e1','e2') )
histos[dirname]["idIso_weight"].Fill( mcCorrectors.double_electron_trigger(row) )

for row in self.tree:
if not self.preselection(row):
Expand Down
3 changes: 3 additions & 0 deletions wh/ControlZMM.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ def preselection(self, row):
if row.m1_m2_Mass > 120: return False
if not selections.muSelection(row, 'm1'): return False #applies basic selection (eta, pt > 10, DZ, pixHits, jetBTag)
if not selections.muSelection(row, 'm2'): return False #applies basic selection (eta, pt > 10, DZ, pixHits, jetBTag)
if row.muVetoPt5IsoIdVtx: return False
if row.eVetoMVAIsoVtx: return False
if row.tauVetoPt20Loose3HitsVtx: return False
return True

def obj1_id(self, row):
Expand Down
94 changes: 84 additions & 10 deletions wh/FakeRatesEE.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,32 @@
from array import array
from pprint import pprint
import ROOT

import FinalStateAnalysis.PlotTools.pytree as pytree
from cutflowtracker import cut_flow_tracker
import math

def inv_mass(pt1,eta1,phi1,pt2,eta2,phi2):
return math.sqrt(
2*pt1*pt2*(math.cosh(eta1 - eta2) - math.cos(phi1 - phi2))
)

cut_flow_step = ['bare', 'trigger', 'e1_e2_DR',
'e1 presel', 'e2 presel', 'jet requirement',
'muon veto', 'bjet veto', 'electron veto', 'tau veto',
'region assignment',
]


region_for_event_list = os.environ.get('EVTLIST_REGION','')
zMassCut = 'NoZmass' in region_for_event_list
if zMassCut:
cut_flow_step.append('zMassCut')
region_for_event_list = region_for_event_list.replace('NoZmass','')
SYNC = ('SYNC' in os.environ) and eval(os.environ['SYNC'])
print region_for_event_list

class FakeRatesEE(MegaBase):
tree = 'ee/final/Ntuple'
tree = 'ee/final/Ntuple' if not SYNC else 'Ntuple'
def __init__(self, tree, outfile, **kwargs):
super(FakeRatesEE, self).__init__(tree, outfile, **kwargs)
# Use the cython wrapper
Expand All @@ -47,7 +70,13 @@ def __init__(self, tree, outfile, **kwargs):
for j in self.iso_points]

def begin(self):
for region in ['wjets', 'qcd', 'wjetsNoZmass', 'qcdNoZmass']:
self.book('', "CUT_FLOW", "Cut Flow", len(cut_flow_step), 0, len(cut_flow_step))
xaxis = self.histograms['CUT_FLOW'].GetXaxis()
self.cut_flow_histo = self.histograms['CUT_FLOW']
for i, name in enumerate(cut_flow_step):
xaxis.SetBinLabel(i+1, name)

for region in ['wjetsLtLow', 'qcd', 'wjetsNoZmass', 'wjetsLtLowNoZmass', 'qcdNoZmass']:
for denom in ['pt10', 'pt20']:
denom_key = (region, denom)
denom_histos = {}
Expand All @@ -57,9 +86,17 @@ def begin(self):
denom_histos['electronInfo'] = self.book(
os.path.join(region, denom),
'electronInfo', "electronInfo",
'electronPt:electronJetPt:weight:'+':'.join(self.lepIds),
'electronPt:electronJetPt:electronJetCSVBtag:electronJetMass:numJets20:numJets40:weight:'+':'.join(self.lepIds),
type=ROOT.TNtuple)

denom_histos['evtInfo'] = self.book(
os.path.join(region, denom),
'evtInfo', 'evtInfo',
'run/l:lumi/l:evt/l:e1Pt/D:e1Eta/D:e1Phi/D:e2Pt/D:e2Eta/D:e2Phi/D:e1ChargeIdTight/D' +\
':e2ChargeIdTight/D:e2RelPFIsoDB/D:e2MtToMET/D:e1MtToMET/D:bjetCSVVetoZHLike/D'+\
':e1RelPFIsoDB/D:e2MVAIDH2TauWP/D:e1MVAIDH2TauWP/D:e1_e2_SS/D:e1MVANonTrig/D:e2MVANonTrig/D',
type=pytree.PyTree)

for numerator in self.lepIds:
num_key = (region, denom, numerator)
num_histos = {}
Expand Down Expand Up @@ -94,17 +131,32 @@ def book_histo(name, *args, **kwargs):


def process(self):
cut_flow_histo = self.cut_flow_histo
cut_flow_trk = cut_flow_tracker(cut_flow_histo)

def preselection(row):
def preselection(row, cut_flow_trk):
if not row.doubleEPass: return False
if not (row.e1MatchesDoubleEPath > 0 and \
row.e2MatchesDoubleEPath > 0): return False
cut_flow_trk.Fill('trigger')

if row.e1_e2_DR < 0.5: return False
cut_flow_trk.Fill('e1_e2_DR')

if not row.e1Pt > 20: return False
if not selections.eSelection(row, 'e1'): return False
if not row.e1MVAIDH2TauWP: return False
cut_flow_trk.Fill('e1 presel')

if not selections.eSelection(row, 'e2'): return False
if not (row.jetVeto40_DR05 >= 1): return False
if not selections.vetos(row): return False
cut_flow_trk.Fill('e2 presel')

#if not (row.jetVeto40_DR05 >= 1): return False
if row.jetVeto20 == 0: return False
cut_flow_trk.Fill('jet requirement')

if not selections.vetos(row, cut_flow_trk): return False

return True

def fill(the_histos, row, fillNtuple=False):
Expand Down Expand Up @@ -135,13 +187,20 @@ def fill(the_histos, row, fillNtuple=False):
#print id_iso_vals
#print self.lepIds
id_iso_vals = [float( i ) for i in id_iso_vals ]
the_histos['electronInfo'].Fill( array("f", [row.e2Pt, row.e2JetPt, weight]+id_iso_vals) )
electron_jet_mass = -1 #inv_mass(row.e2Pt, row.e2Eta, row.e2Phi, row.leadingJetPt, row.leadingJetEta, row.leadingJetPhi)

the_histos['electronInfo'].Fill( array("f", [row.e2Pt, max(row.e2Pt, row.e2JetPt), max(0, row.e2JetCSVBtag),
electron_jet_mass, row.jetVeto20, row.jetVeto40_DR05, weight]+id_iso_vals) )
the_histos['evtInfo'].Fill( row )


histos = self.histograms
#pprint( histos)
for row in self.tree:
if not preselection(row):
cut_flow_trk.new_row(row.run,row.lumi,row.evt)
cut_flow_trk.Fill('bare')

if not preselection(row, cut_flow_trk):
continue

region = selections.control_region_ee(row)
Expand All @@ -150,7 +209,18 @@ def fill(the_histos, row, fillNtuple=False):

if region == 'zee':
continue

if region_for_event_list and region == region_for_event_list:
cut_flow_trk.Fill('region assignment')
if zMassCut and not (60 < row.e1_e2_Mass < 120):
cut_flow_trk.Fill('zMassCut')

# This is a QCD or Wjets
if region_for_event_list and region == region_for_event_list\
and (not zMassCut or not (60 < row.e1_e2_Mass < 120)) \
and not SYNC:
print '%i:%i:%i' % (row.run, row.lumi, row.evt)
continue

def make_region_plots(full_region):
fill(histos[full_region], row, True)
Expand All @@ -169,11 +239,15 @@ def make_region_plots(full_region):
make_region_plots((region, 'pt10'))
if not (row.e1_e2_Mass > 60 and row.e1_e2_Mass < 120):
make_region_plots((region+'NoZmass', 'pt10'))

if region == 'wjetsLtLow' and row.e1MtToMET > 55:
make_region_plots(('wjetsNoZmass', 'pt10'))

if row.e2Pt > 20:
make_region_plots((region, 'pt20'))
if not (row.e1_e2_Mass > 60 and row.e1_e2_Mass < 120):
make_region_plots((region+'NoZmass', 'pt20'))
if region == 'wjetsLtLow' and row.e1MtToMET > 55:
make_region_plots(('wjetsNoZmass', 'pt20'))


def finish(self):
Expand Down
Loading