Skip to content

Commit

Permalink
Merge pull request cms-sw#16 from emanueledimarco/76X
Browse files Browse the repository at this point in the history
Several updates to the monoX analysis
  • Loading branch information
gpetruc committed Mar 7, 2016
2 parents 0e35783 + 0a33022 commit 2ab422e
Show file tree
Hide file tree
Showing 33 changed files with 900 additions and 208 deletions.
91 changes: 57 additions & 34 deletions MonoXAnalysis/cfg/run_monojet_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,20 @@
runData = getHeppyOption("runData",True)
scaleProdToLumi = float(getHeppyOption("scaleProdToLumi",-1)) # produce rough equivalent of X /pb for MC datasets
saveSuperClusterVariables = getHeppyOption("saveSuperClusterVariables",True)
saveFatJetIDVariables = getHeppyOption("saveFatJetIDVariables",True)
removeJetReCalibration = getHeppyOption("removeJetReCalibration",False)
doT1METCorr = getHeppyOption("doT1METCorr",True)
forcedSplitFactor = getHeppyOption("splitFactor",-1)
forcedFineSplitFactor = getHeppyOption("fineSplitFactor",-1)
isTest = getHeppyOption("test",None) != None and not re.match("^\d+$",getHeppyOption("test"))
doLepCorr = getHeppyOption("doLepCorr",True)
doPhotonCorr = getHeppyOption("doPhotonCorr",True)

# Define skims
signalSkim = False
diLepSkim = False
singleLepSkim = True
singleLepSkim = False
singlePhotonSkim = False

# --- MONOJET SKIMMING ---
if signalSkim == True:
Expand All @@ -39,6 +43,13 @@
monoJetCtrlLepSkim.idCut = '(lepton.muonID("POG_ID_Tight") and lepton.relIso04 < 0.12) if abs(lepton.pdgId())==13 else \
(lepton.electronID("POG_Cuts_ID_SPRING15_25ns_v1_ConvVetoDxyDz_Tight_full5x5") and (lepton.relIso03<0.0354 if abs(lepton.superCluster().eta())<1.479 else lepton.relIso03<0.0646))'
monoJetCtrlLepSkim.ptCuts = [20]
if singlePhotonSkim == True:
gammaJetCtrlSkim.minPhotons = 1
gammaJetCtrlSkim.minJets = 1

# --- Photon OR Electron SKIMMING ---
#if photonOrEleSkim == True:


# run miniIso
lepAna.doMiniIsolation = True
Expand Down Expand Up @@ -125,6 +136,14 @@
NTupleVariable("superCluster_seed.energy", lambda x: x.superCluster().seed().energy() if (abs(x.pdgId())==11 and hasattr(x,"superCluster")) else -999, help="Electron superCluster.seed.energy"),
])

# for applying fatjet ID
if saveFatJetIDVariables:
fatJetType.addVariables([
NTupleVariable("chHEF", lambda x : x.chargedHadronEnergyFraction(), float, mcOnly = False, help="chargedHadronEnergyFraction (relative to uncorrected jet energy)"),
NTupleVariable("neHEF", lambda x : x.neutralHadronEnergyFraction(), float, mcOnly = False,help="neutralHadronEnergyFraction (relative to uncorrected jet energy)"),
NTupleVariable("chEmEF", lambda x : x.chargedEmEnergyFraction(), float, mcOnly = False,help="chargedEmEnergyFraction (relative to uncorrected jet energy)"),
NTupleVariable("neEmEF", lambda x : x.neutralEmEnergyFraction(), float, mcOnly = False,help="neutralEmEnergyFraction (relative to uncorrected jet energy)"),
])

## Tree Producer
treeProducer = cfg.Analyzer(
Expand Down Expand Up @@ -162,12 +181,17 @@
metAna.recalibrate = "type1"
metAna.old74XMiniAODs = False

# lepton scale / resolution corrections
if doLepCorr:
doECalElectronCorrections(era="25ns")
doKalmanMuonCorrections()
if doPhotonCorr:
doECalPhotonCorrections()

#-------- SEQUENCE
sequence = cfg.Sequence(dmCoreSequence+[
# monoXRazorAna,
# monoXMT2Ana,
ttHFatJetAna,
monoJetVarAna,
MonoJetEventAna,
treeProducer,
Expand All @@ -177,6 +201,7 @@
from CMGTools.RootTools.samples.triggers_13TeV_Spring15 import *
from CMGTools.RootTools.samples.triggers_8TeV import triggers_1mu_8TeV, triggers_mumu_8TeV, triggers_mue_8TeV, triggers_ee_8TeV;
triggers_AllMonojet = triggers_metNoMu90_mhtNoMu90 + triggers_metNoMu120_mhtNoMu120 + triggers_AllMET170 + triggers_AllMET300
triggers_SinglePhoton = triggers_photon155 + triggers_photon165_HE10 + triggers_photon175
triggerFlagsAna.triggerBits = {
'DoubleMu' : triggers_mumu_iso,
'DoubleEl' : triggers_ee,
Expand All @@ -186,12 +211,13 @@
'MonoJetMetNoMuMHT120' : triggers_metNoMu120_mhtNoMu120,
'Met170' : triggers_AllMET170,
'Met300' : triggers_AllMET300,
'SinglePho' : triggers_SinglePhoton,
}
triggerFlagsAna.unrollbits = True
triggerFlagsAna.saveIsUnprescaled = False
triggerFlagsAna.checkL1Prescale = False

from CMGTools.MonoXAnalysis.samples.samples_monojet_13TeV_74X import *
from CMGTools.MonoXAnalysis.samples.samples_monojet_13TeV_76X import *
from CMGTools.RootTools.samples.samples_13TeV_DATA2015 import *

selectedComponents = [];
Expand All @@ -207,32 +233,38 @@
c.splitFactor = len(c.files)
c.fineSplitFactor = 1

json = "/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions15/13TeV/Cert_246908-260627_13TeV_PromptReco_Collisions15_25ns_JSON.txt"
json = "/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions15/13TeV/Reprocessing/Cert_13TeV_16Dec2015ReReco_Collisions15_25ns_JSON.txt"
if runData and not isTest: # For running on data
run_ranges = [ (246908,260627) ]; useAAA=False; is50ns=False
run_ranges = [ (254227,260627) ]; useAAA=False; is50ns=False

compSelection = ""
DatasetsAndTriggers = []
selectedComponents = []; vetos = []
ProcessingsAndRunRanges = []; Shorts = []
ProcessingsAndRunRanges.append( ("Run2015C_25ns-05Oct2015-v1", [254227,255031] ) ); Shorts.append("Run2015C_05Oct")
ProcessingsAndRunRanges.append( ("Run2015D-05Oct2015-v1", [256630,258158] ) ); Shorts.append("Run2015D_05Oct")
ProcessingsAndRunRanges.append( ("Run2015D-PromptReco-v4", [258159,999999] ) ); Shorts.append("Run2015D_v4")

# ProcessingsAndRunRanges.append( ("Run2015C_25ns-05Oct2015-v1", [254227,255031] ) ); Shorts.append("Run2015C_05Oct")
# ProcessingsAndRunRanges.append( ("Run2015D-05Oct2015-v1", [256630,258158] ) ); Shorts.append("Run2015D_05Oct")
# ProcessingsAndRunRanges.append( ("Run2015D-PromptReco-v4", [258159,999999] ) ); Shorts.append("Run2015D_v4")

ProcessingsAndRunRanges.append( ("Run2015C_25ns-16Dec2015-v1", [254227,254914] ) ); Shorts.append("Run2015C_16Dec")
ProcessingsAndRunRanges.append( ("Run2015D-16Dec2015-v1", [256630,260627] ) ); Shorts.append("Run2015D_16Dec")

if diLepSkim == True:
DatasetsAndTriggers.append( ("DoubleMuon", triggers_mumu_iso + triggers_mumu_ss + triggers_mumu_ht + triggers_3mu + triggers_3mu_alt + triggers_AllMonojet) )
DatasetsAndTriggers.append( ("DoubleEG", triggers_ee + triggers_ee_ht + triggers_3e) )
if singleLepSkim == True:
DatasetsAndTriggers.append( ("DoubleMuon", triggers_mumu_iso + triggers_mumu_ss + triggers_mumu_ht + triggers_3mu + triggers_3mu_alt + triggers_AllMonojet) )
DatasetsAndTriggers.append( ("DoubleEG", triggers_ee + triggers_ee_ht + triggers_3e) )
DatasetsAndTriggers.append( ("SingleMuon", triggers_1mu_iso + triggers_1mu_iso_50ns + triggers_1mu_noniso + triggers_AllMonojet) )
DatasetsAndTriggers.append( ("SingleElectron", triggers_1e + triggers_1e_50ns) )
DatasetsAndTriggers.append( ("SingleElectron", triggers_ee + triggers_ee_ht + triggers_3e + triggers_1e + triggers_1e_50ns) )
DatasetsAndTriggers.append( ("SinglePhoton", triggers_SinglePhoton) )
if singlePhotonSkim == True:
DatasetsAndTriggers.append( ("SinglePhoton", triggers_SinglePhoton) )
if signalSkim == True:
DatasetsAndTriggers.append( ("MET", triggers_AllMonojet ) )


for pd,triggers in DatasetsAndTriggers:
iproc=0
for processing,run_dslimits in ProcessingsAndRunRanges:
if ("DoubleEG" in pd): processing.replace("v1","v2",1)
for run_range in run_ranges:
run_min = max(run_range[0],run_dslimits[0])
run_max = min(run_range[1],run_dslimits[1])
Expand All @@ -257,7 +289,8 @@
comp.fineSplitFactor = 1
selectedComponents.append( comp )
iproc += 1
# vetos += triggers # no need of this for monojet, since there are not overlapping datasets for signal region
if singleLepSkim and "SinglePhoton" in pd:
vetos += triggers
if json is None:
dmCoreSequence.remove(jsonAna)

Expand Down Expand Up @@ -330,54 +363,44 @@
comp.files = comp.files[:5]
comp.splitFactor = 1
comp.fineSplitFactor = 5
elif test == 'synch-74X': # sync
elif test == 'synch-76X': # sync
#eventSelector.toSelect = [ (1,165,84628), ]
#sequence = cfg.Sequence([eventSelector] + dmCoreSequence + [ ttHFatJetAna, monoJetVarAna, MonoJetEventAna, treeProducer, ])
monoJetSkim.metCut = 0
what = getHeppyOption("sample")
if what == "TTbarDM":
comp = kreator.makeMCComponent("TTbarDM","/TTbarDMJets_pseudoscalar_Mchi-1_Mphi-100_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM", "CMS", ".*root", 1.0, useAAA=True)
#comp = TTLep_pow
#comp.files = [ '/tmp/emanuele/1486FE25-A16D-E511-93F2-001EC9ADE672.root' ]
selectedComponents = [ comp ]
elif what == "DMS":
comp = DMS_Mchi_100_gSM_1p0_gDM_1p0
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIISpring15MiniAODv2/DMS_NNPDF30_Scalar_Mphi-300_Mchi-100_gSM-1p0_gDM-1p0_13TeV-powheg/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/10000/6872703C-7972-E511-8228-0CC47A009E26.root' ]
selectedComponents = [ comp ]
elif what == "TTLep":
comp = TTLep_pow
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIISpring15MiniAODv2/TTTo2L2Nu_13TeV-powheg/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/60000/F8910E89-C56D-E511-BD90-003048F35244.root' ]
comp = kreator.makeMCComponent("TTbarDM","/TTbarDMJets_pseudoscalar_Mchi-1_Mphi-100_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIIFall15MiniAODv2-PU25nsData2015v1_76X_mcRun2_asymptotic_v12-v1/MINIAODSIM", "CMS", ".*root", 1.0, useAAA=True)
selectedComponents = [ comp ]
elif what == "DYJets":
comp = DYJetsToLL_M50
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIISpring15MiniAODv2/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/50000/00759690-D16E-E511-B29E-00261894382D.root' ]
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIIFall15MiniAODv2/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/PU25nsData2015v1_HCALDebug_76X_mcRun2_asymptotic_v12-v1/00000/006C9F73-3FB9-E511-9AFE-001E67E95C52.root' ]
selectedComponents = [ comp ]
elif what == "TTJets":
comp = TJets_LO
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIISpring15MiniAODv2/TTJets_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/30000/001F4F14-786E-E511-804F-0025905A60FE.root' ]
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIIFall15MiniAODv2/TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/PU25nsData2015v1_76X_mcRun2_asymptotic_v12-v1/00000/00547C97-2FCC-E511-8D75-002590DB91D2.root' ]
selectedComponents = [ comp ]
elif what == "WJets":
comp = WJetsToLNu_HT100to200
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIISpring15MiniAODv2/WJetsToLNu_HT-100To200_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/10000/003F1529-D36D-E511-9E33-001E6724816F.root' ]
comp.files = [ 'root://eoscms//eos/cms/store/mc/RunIIFall15MiniAODv2/WJetsToLNu_HT-400To600_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/PU25nsData2015v1_76X_mcRun2_asymptotic_v12-v1/50000/0CF84FB8-2CBC-E511-B255-001EC9AF22C6.root' ]
selectedComponents = [ comp ]
else:
selectedComponents = mcSamples_monojet_Asymptotic25ns
jetAna.smearJets = False
for comp in selectedComponents:
comp.splitFactor = 1
comp.fineSplitFactor = 1 if getHeppyOption("single") else 4
elif test == '74X-Data':
elif test == '76X-Data':
what = getHeppyOption("sample")
if what == "DoubleEG":
comp = DoubleEG_Run2015D_05Oct
comp.files = [ 'root://eoscms//eos/cms/store/data/Run2015D/DoubleEG/MINIAOD/05Oct2015-v1/50000/0014E86F-656F-E511-9D3F-002618943831.root' ]
comp = DoubleEG_Run2015D_16Dec
comp.files = [ 'root://eoscms//eos/cms/store/data/Run2015D/DoubleEG/MINIAOD/16Dec2015-v2/00000/043D5E4A-83A6-E511-B159-0CC47A4D76D6.root' ]
selectedComponents = [ comp ]
elif what == "DoubleMuon":
comp = DoubleMuon_Run2015D_05Oct
comp.files = [ 'root://eoscms//eos/cms/store/data/Run2015D/DoubleMuon/MINIAOD/05Oct2015-v1/30000/04008DF6-8A6F-E511-B034-0025905A6136.root' ]
comp = DoubleMuon_Run2015D_16Dec
comp.files = [ 'root://eoscms//eos/cms/store/data/Run2015D/DoubleMuon/MINIAOD/16Dec2015-v1/60000/B4354564-90B3-E511-8FC7-0025905B8598.root' ]
selectedComponents = [ comp ]
else:
selectedComponents = dataSamples_Run2015D_05Oct
selectedComponents = dataSamples_Run2015D_16Dec
for comp in selectedComponents:
comp.json = json
comp.splitFactor = 1
Expand Down
2 changes: 1 addition & 1 deletion MonoXAnalysis/macros/prepareScaleFactorsFriendTree.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
MODULES.append( ('trigmetnomu',MetNoMuTriggerSF()) )

from CMGTools.MonoXAnalysis.tools.xsec_KF import xsec_KF
MODULES.append( ('nlokf', xsec_KF("/afs/cern.ch/work/e/emanuele/public/monox/leptonsf/xsec_kfactors.root","nominal")) )
MODULES.append( ('nlokf', xsec_KF("/afs/cern.ch/work/e/emanuele/public/monox/leptonsf/xsec_kfactors.root")) )

class ScaleFactorProducer(Module):
def __init__(self,name,booker,modules):
Expand Down
46 changes: 42 additions & 4 deletions MonoXAnalysis/python/analyzers/dmCore_modules_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@
# do MC matching
do_mc_match = True, # note: it will in any case try it only on MC, not on data
match_inclusiveLeptons = False, # match to all inclusive leptons
do_mc_match_photons = False, # do not do MC matching of electrons to photons
)


Expand All @@ -209,13 +208,25 @@
ptCuts = [10], # can give a set of pt cuts on the leptons
)

## gamma+jets Skim
from CMGTools.MonoXAnalysis.analyzers.gammaJetCtrlSkimmer import gammaJetCtrlSkimmer
gammaJetCtrlSkim = cfg.Analyzer(
gammaJetCtrlSkimmer, name='gammaJetCtrlSkimmer',
minPhotons = 0,
minJets = 0,
photonIdCut = 'photon.photonID("PhotonCutBasedIDLoose")',
photonPtCut = 150,
jetPtCut = 100,
)

## Photon Analyzer (generic)
photonAna = cfg.Analyzer(
PhotonAnalyzer, name='photonAnalyzer',
photons='slimmedPhotons',
ptMin = 15,
etaMax = 2.5,
gammaID = "POG_SPRING15_50ns_Loose",
doPhotonScaleCorrections=False,
gammaID = "POG_SPRING15_25ns_Loose",
rhoPhoton = 'fixedGridRhoFastjetAll',
gamma_isoCorr = 'rhoArea',
doFootprintRemovedIsolation = True,
Expand Down Expand Up @@ -313,8 +324,8 @@
recalibrateJets = True, # "MC", # True, False, 'MC', 'Data'
applyL2L3Residual = True, # Switch to 'Data' when they will become available for Data
recalibrationType = "AK4PFchs",
mcGT = "Summer15_25nsV2_MC",
dataGT = "Summer15_25nsV5_DATA",
mcGT = "76X_mcRun2_asymptotic_v12",
dataGT = "76X_dataRun2_v15_Run2015D_25ns",
jecPath = "%s/src/CMGTools/RootTools/data/jec/" % os.environ['CMSSW_BASE'],
shiftJEC = 0, # set to +1 or -1 to get +/-1 sigma shifts
addJECShifts = False, # if true, add "corr", "corrJECUp", and "corrJECDown" for each jet (requires uncertainties to be available!)
Expand Down Expand Up @@ -416,6 +427,31 @@
jetPt = 40.,
)

# Electron and Photon calibrator (scale and smearings)
def doECalElectronCorrections(sync=False,era="25ns"):
global lepAna, monoJetCtrlLepSkim
lepAna.doElectronScaleCorrections = {
'data' : 'EgammaAnalysis/ElectronTools/data/76X_16DecRereco_2015',
'GBRForest': ('$CMSSW_BASE/src/CMGTools/RootTools/data/egamma_epComb_GBRForest_76X.root',
'gedelectron_p4combination_'+era),
'isSync': sync
}
def doECalPhotonCorrections(sync=False):
global photonAna, gammaJetCtrlSkimmer
photonAna.doPhotonScaleCorrections = {
'data' : 'EgammaAnalysis/ElectronTools/data/76X_16DecRereco_2015',
'isSync': sync
}
def doKalmanMuonCorrections(sync=False,smear="basic"):
global lepAna
lepAna.doMuonScaleCorrections = ( 'Kalman', {
'MC': 'MC_76X_13TeV',
'Data': 'DATA_76X_13TeV',
'isSync': sync,
'smearMode':smear
})


# Core sequence of all common modules
dmCoreSequence = [
lheWeightAna,
Expand All @@ -438,7 +474,9 @@
jetAna,
metAna,
ttHCoreEventAna,
ttHFatJetAna,
monoJetSkim,
gammaJetCtrlSkim,
triggerFlagsAna,
eventFlagsAna,
]
46 changes: 46 additions & 0 deletions MonoXAnalysis/python/analyzers/gammaJetCtrlSkimmer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from PhysicsTools.Heppy.analyzers.core.Analyzer import Analyzer

class gammaJetCtrlSkimmer( Analyzer ):
def __init__(self, cfg_ana, cfg_comp, looperName ):
super(gammaJetCtrlSkimmer,self).__init__(cfg_ana,cfg_comp,looperName)
self.photonPtCut = cfg_ana.photonPtCut if hasattr(cfg_ana, 'photonPtCut') else []
self.jetPtCut = cfg_ana.jetPtCut if hasattr(cfg_ana, 'jetPtCut') else []

self.photonIdCut = cfg_ana.photonIdCut if (getattr(cfg_ana, 'photonIdCut', '') != '') else "True"
self.idFunc = eval("lambda photon : "+self.photonIdCut);

def declareHandles(self):
super(gammaJetCtrlSkimmer, self).declareHandles()

def beginLoop(self, setup):
super(gammaJetCtrlSkimmer,self).beginLoop(setup)
self.counters.addCounter('events')
count = self.counters.counter('events')
count.register('all events')
count.register('accepted events')


def process(self, event):
self.readCollections( event.input )
self.counters.counter('events').inc('all events')


photons = []
for pho in event.selectedPhotons:
if not self.idFunc(pho):
continue
if pho.pt() > self.photonPtCut:
photons.append(pho)

jets = []
allJets = event.cleanJets + event.cleanJetsFwd + event.fatJets
for jet in allJets:
if jet.pt() > self.jetPtCut:
jets.append(jet)

ret = False
if len(photons) >= self.cfg_ana.minPhotons and len(jets) >= self.cfg_ana.minJets:
ret = True

if ret: self.counters.counter('events').inc('accepted events')
return ret
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@
"selectedLeptons" : NTupleCollection("LepGood", leptonTypeSusyExtra, 10, help="Leptons after the preselection"),
"selectedPhotons" : NTupleCollection("GammaGood", photonTypeSusy, 20, help="photons with pt>20 and loose cut based ID"),
##------------------------------------------------
"cleanJets" : NTupleCollection("Jet", jetTypeSusyExtra, 20, help="Cental jets after full selection and cleaning, sorted by pt"),
"cleanJets" : NTupleCollection("Jet", jetTypeSusyExtra, 10, help="Cental jets after full selection and cleaning, sorted by pt"),
"cleanJetsFwd" : NTupleCollection("JetFwd", jetTypeSusyExtra, 5, help="Forward jets after full selection and cleaning, sorted by pt"),
"fatJets" : NTupleCollection("FatJet", fatJetType, 20, help="AK8 jets, sorted by pt"),
"fatJets" : NTupleCollection("FatJet", fatJetType, 10, help="AK8 jets, sorted by pt"),
##------------------------------------------------
#"discardedJets" : NTupleCollection("DiscJet", jetTypeSusyExtra, 10, help="Jets discarted in the jet-lepton cleaning"),
#"discardedLeptons" : NTupleCollection("DiscLep", leptonTypeSusyExtra, 8, help="Leptons discarded in the jet-lepton cleaning"),
Expand Down
Loading

0 comments on commit 2ab422e

Please sign in to comment.