Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ABCNet-compatible code #5

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Large diffs are not rendered by default.

Large diffs are not rendered by default.

14 changes: 12 additions & 2 deletions macros/Constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@ class Constants():
def __init__(self):
self.lumi = {
'2022': {'C': 4.96,'D': 2.94,'E': 5.84,'F': 17.80, 'G': 2},
'2018': {'A': 14.0, 'B': 7.1, 'C': 6.94, 'D': 31.93},
}
self.energy = {
'2022': '13.6',
'2018': '13.0',
}
self.pileup = {
'2022': 43,
'2018': 34,
}
self.year_run_map = {
'2022': ['C','D','E','F','G'],
'2018': ['A','B','C','D']
}
self.MC_samples = ['DY','TTbar','QCD_Flat']
self.data_samples = ['Muon', 'JetHT']
Expand Down Expand Up @@ -83,7 +87,13 @@ def __init__(self):
# 'QCD_Flat': 'datasets/QCD_Pt_15to7000_Flat_2022_Winter23_Nano10_jme.txt',
# 'QCD_Flat_Fix': 'datasets/QCD_Pt_15to7000_Flat_2022_Winter23_Nano10_jme.txt',
},
}
},
'2018': {
'Summer20': {
'DY': 'datasets/DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8_RunIISummer20UL18.txt',
'QCD_Flat': 'datasets/QCD_Pt-15to7000_TuneCP5_Flat2018_13TeV_pythia8_RunIISummer20UL18.txt',
},
},
}

self._plot_info = {
Expand Down Expand Up @@ -148,4 +158,4 @@ def get_type(self, year, dataset):
raise ValueError(f'{dataset} is neither mc nor data')

def get_files(self, year, campaign, dataset):
return self.files[year][campaign][dataset]
return self.files[year][campaign][dataset]
10 changes: 7 additions & 3 deletions macros/GetDasInfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
"""
import subprocess, argparse

def run_dasgoclient(dataset, output_file):
def run_dasgoclient(dataset, output_file, user):
"""
Runs the dasgoclient command with the given dataset name,
and saves the output to the specified file.
"""
cmd = f"dasgoclient --query 'file dataset={dataset}'"
if not user:
cmd = f"dasgoclient --query 'file dataset={dataset}'"
else:
cmd = f"dasgoclient --query 'instance=prod/phys03 file dataset={dataset}'"
output = subprocess.check_output(cmd, shell=True)
with open(output_file, "w") as f:
decoded_output = output.decode()
Expand All @@ -25,7 +28,8 @@ def run_dasgoclient(dataset, output_file):
parser = argparse.ArgumentParser(description="Runs dasgoclient with the given dataset name and saves the output to a file.")
parser.add_argument("dataset", help="the name of the dataset")
parser.add_argument("output_file", help="the name of the output file")
parser.add_argument('--user', default=False, action='store_true', help='query for a dataset published by a user in prod/phys03')
args = parser.parse_args()

run_dasgoclient(args.dataset, args.output_file)
run_dasgoclient(args.dataset, args.output_file, args.user)
print(f"Output saved to {args.output_file}.")
13 changes: 10 additions & 3 deletions macros/ModuleRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ def CreateConfigFiles(self):
type_ = self.get_type(dataset=ds, year=year)
if not type_ in self.campaigns: continue
campaign = self.campaigns[type_]
jec = self.jecs[type_] if self.jecs else ''
jecCHS = self.extra_info['jecCHS'][type_] #self.jecs[type_] if self.jecs else ''
jecPUPPI = self.extra_info['jecPUPPI'][type_] #self.jecs[type_] if self.jecs else ''
jecABC = self.extra_info['jecABC'][type_] #self.jecs[type_] if self.jecs else ''
sample_infos[ds] = {
'era': year,
'group': ds,
Expand All @@ -58,8 +60,13 @@ def CreateConfigFiles(self):
'type': type_,
'split': self.split_files_in,
'campaign': campaign,
'jec': jec,
'jecCHS': jecCHS,
'jecPUPPI': jecPUPPI,
'jecABC': jecABC,
}
del self.extra_info['jecCHS']
del self.extra_info['jecPUPPI']
del self.extra_info['jecABC']
sample_infos[ds].update(self.extra_info)
if sample_infos[ds]['type']=='mc':
sample_infos[ds]['cross-section'] = self.xsec[ds]
Expand Down Expand Up @@ -151,4 +158,4 @@ def Plot(self, pdfextraname=''):
fname = os.path.join('results',sample)
MP = MakePlots(year=year, path=path, fname=fname, pdfextraname=pdfextraname).PlotAll()



23 changes: 15 additions & 8 deletions macros/steer.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ def commandline():

def main():
extra_info = {}
years = ['2022']
#years = ['2022']
years = ['2018']

# runs = ['C','D']
# campaigns = {'mc': 'Winter22', 'data': 'Prompt'}
Expand All @@ -45,23 +46,29 @@ def main():
# jecs = {'mc': 'Summer22EERun3_V0_MC', 'data': 'Summer22EERun3_RunF_V0_DATA'} # best


runs = ['G']
campaigns = {'mc': 'Summer22_Nominal', 'data': 'Prompt'}
#runs = ['G']
#campaigns = {'mc': 'Summer22_Nominal', 'data': 'Prompt'}
runs = ['A']
campaigns = {'mc': 'Summer20'} #no data for now
# campaigns = {'mc': 'Summer22_NPVA2p0B0p13', 'data': 'PuppiTune'}
# campaigns = {'mc': 'Summer22_NPVA2p0B0p3', 'data': 'PuppiTune'}
# campaigns = {'mc': 'Summer22_NPVA3p0B0p13', 'data': 'PuppiTune'}

# campaigns = {'mc': 'Winter22', 'data': 'Prompt'}
# campaigns = {'mc': 'Summer22_NPVA2p0B0p13', 'data': 'PuppiTune'}
campaigns = {'mc': 'Summer22_NPVA2p0B0p3', 'data': 'PuppiTune'}
#campaigns = {'mc': 'Summer22_NPVA2p0B0p3', 'data': 'PuppiTune'}

jecs = {'mc': 'Summer22EERun3_V0_MC', 'data': 'Summer22EERun3_RunF_V0_DATA'}
#jecs = {'mc': 'Summer22EERun3_V0_MC', 'data': 'Summer22EERun3_RunF_V0_DATA'}
jecs = {'mc': 'UL_ABCNet_V1_MC', 'data': 'UL_ABCNet_RunA_V1_DATA'}

extra_info = {'plot_level': 'response'}
extra_info = {'plot_level': 'response',
'jecCHS': {'mc': 'UL_ABCNet_V1_MC', 'data': 'UL_ABCNet_RunA_V1_DATA'},
'jecPUPPI': {'mc': 'UL_ABCNet_V1_MC', 'data': 'UL_ABCNet_RunA_V1_DATA'},
'jecABC': {'mc': 'UL_ABCNet_V1_MC', 'data': 'UL_ABCNet_RunA_V1_DATA'}}


module = 'DY'
# module = 'QCD'
#module = 'DY'
module = 'QCD'

# maxFiles=10
maxFiles=1
Expand Down
83 changes: 73 additions & 10 deletions modules/DYModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def definePlots(self, tree, noSel, sample=None, sampleCfg=None):
# ak8Jets, lambda jet: jet.jetId & 2)


muons, electrons, clElectrons, ak4Jets, clak4Jets, ak4JetsID, ak4Jetspt40, ak4Jetspt100, ak4Jetsetas2p4, ak4Jetsetag2p4 = defs.defineObjects(tree)
muons, electrons, clElectrons, ak4Jets, clak4Jets, ak4JetsID, ak4Jetspt40, ak4Jetspt100, ak4Jetsetas2p4, ak4Jetsetag2p4, ak4PUPPIJets, clak4PUPPIJets, ak4PUPPIJetsID, ak4PUPPIJetspt40, ak4PUPPIJetspt100, ak4PUPPIJetsetas2p4, ak4PUPPIJetsetag2p4, ak4ABCJets, clak4ABCJets, ak4ABCJetsID, ak4ABCJetspt40, ak4ABCJetspt100, ak4ABCJetsetas2p4, ak4ABCJetsetag2p4 = defs.defineObjects(tree)

# ak4bJets = op.select(
# ak4Jets, lambda jet: jet.btagDeepB > 0.2770) # 2018 WP
Expand Down Expand Up @@ -79,16 +79,29 @@ def definePlots(self, tree, noSel, sample=None, sampleCfg=None):
recojetpt30 = op.select(ak4Jets, lambda jet: jet.pt > 30)
recojetpt20 = op.select(ak4Jets, lambda jet: jet.pt > 20)

recoPUPPIjetpt30 = op.select(ak4PUPPIJets, lambda jet: jet.pt > 30)
recoPUPPIjetpt20 = op.select(ak4PUPPIJets, lambda jet: jet.pt > 20)

recoABCjetpt30 = op.select(ak4ABCJets, lambda jet: jet.pt > 30)
recoABCjetpt20 = op.select(ak4ABCJets, lambda jet: jet.pt > 20)

# firstgenjet = tree.Jet[0].chHEF

effjets = defs.effjets(recojetpt20)

effjets = defs.effjets(recojetpt20) #USING NEITHER CLEANED NOR ID JETS IN EFF/PUR/PU JETS. IS THIS INTENDED?
effPUPPIjets = defs.effjets(recoPUPPIjetpt20)
effABCjets = defs.effjets(recoABCjetpt20)

purityjets = defs.purityjets(recojetpt30)
purityPUPPIjets = defs.purityjets(recoPUPPIjetpt30)
purityABCjets = defs.purityjets(recoABCjetpt30)

pujets = defs.pujets(ak4Jets)

puPUPPIjets = defs.pujets(ak4PUPPIJets)
puABCjets = defs.pujets(ak4ABCJets)

matchedjets = defs.matchedjets(tree.Jet)

matchedPUPPIjets = defs.matchedjets(tree.JetPuppi)
matchedABCjets = defs.matchedjets(tree.JetABC)

#############################################################################
# Plots #
Expand All @@ -98,11 +111,20 @@ def definePlots(self, tree, noSel, sample=None, sampleCfg=None):
### noSel
plots+=cp.muonPlots(muons, noSel, "noSel")
plots+=cp.electronPlots(electrons, noSel, "noSel")
#CHS
plots+=cp.AK4jetPlots(ak4Jets, noSel, "noSel")
plots+=cp.AK4jetPlots(ak4JetsID, noSel, "noSelJetID")
plots+=cp.AK4jetPlots(ak4Jetspt40, noSel, "noSelJetpt40")
plots+=cp.eventPlots(tree, noSel, "noSel")

#PUPPI
plots+=cp.AK4jetPlots(ak4PUPPIJets, noSel, "noSelPUPPI")
plots+=cp.AK4jetPlots(ak4PUPPIJetsID, noSel, "noSelPUPPIJetID")
plots+=cp.AK4jetPlots(ak4PUPPIJetspt40, noSel, "noSelPUPPIJetpt40")
#ABC
plots+=cp.AK4jetPlots(ak4ABCJets, noSel, "noSelABC")
plots+=cp.AK4jetPlots(ak4ABCJetsID, noSel, "noSelABCJetID")
plots+=cp.AK4jetPlots(ak4ABCJetspt40, noSel, "noSelABCJetpt40")

### two leptons
plots+=cp.muonPlots(muons, hasTwoSFLeptons, "hasTwoSFLeptons")
plots+=cp.electronPlots(electrons, hasTwoSFLeptons, "hasTwoSFLeptons")
Expand All @@ -112,26 +134,67 @@ def definePlots(self, tree, noSel, sample=None, sampleCfg=None):
plots+=cp.muonPlots(muons, Zmasscut, "Zmasscut")
plots+=cp.electronPlots(electrons, Zmasscut, "Zmasscut")
plots+=cp.ZbosonPlots(Zboson, Zmasscut, "Zmasscut")
#CHS
plots+=cp.AK4jetPlots(ak4Jets, Zmasscut, "Zmasscut")
plots+=cp.AK4jetPlots(ak4JetsID, Zmasscut, "ZmasscutJetID")
plots+=cp.AK4jetPlots(ak4Jetspt40, Zmasscut, "ZmasscutJetpt40")
plots+=cp.AK4jetPlots(ak4Jetspt100, Zmasscut, "ZmasscutJetpt100")
plots+=cp.AK4jetPlots(ak4Jetsetas2p4, Zmasscut, "ZmasscutJetetas2p4")
plots+=cp.AK4jetPlots(ak4Jetsetag2p4, Zmasscut, "ZmasscutJetetag2p4")

if sampleCfg['type'] == 'mc':
#PUPPI
plots+=cp.AK4jetPlots(ak4PUPPIJets, Zmasscut, "ZmasscutPUPPI")
plots+=cp.AK4jetPlots(ak4PUPPIJetsID, Zmasscut, "ZmasscutPUPPIJetID")
plots+=cp.AK4jetPlots(ak4PUPPIJetspt40, Zmasscut, "ZmasscutPUPPIJetpt40")
plots+=cp.AK4jetPlots(ak4PUPPIJetspt100, Zmasscut, "ZmasscutPUPPIJetpt100")
plots+=cp.AK4jetPlots(ak4PUPPIJetsetas2p4, Zmasscut, "ZmasscutPUPPIJetetas2p4")
plots+=cp.AK4jetPlots(ak4PUPPIJetsetag2p4, Zmasscut, "ZmasscutPUPPIJetetag2p4")
#ABC
plots+=cp.AK4jetPlots(ak4ABCJets, Zmasscut, "ZmasscutABC")
plots+=cp.AK4jetPlots(ak4ABCJetsID, Zmasscut, "ZmasscutABCJetID")
plots+=cp.AK4jetPlots(ak4ABCJetspt40, Zmasscut, "ZmasscutABCJetpt40")
plots+=cp.AK4jetPlots(ak4ABCJetspt100, Zmasscut, "ZmasscutABCJetpt100")
plots+=cp.AK4jetPlots(ak4ABCJetsetas2p4, Zmasscut, "ZmasscutABCJetetas2p4")
plots+=cp.AK4jetPlots(ak4ABCJetsetag2p4, Zmasscut, "ZmasscutABCJetetag2p4")

if sampleCfg['type'] == 'mc':
#CHS
plots+=cp.effPurityPlots(effjets,Zmasscut,"effPurity_effmatched", tree)
plots+=cp.effPurityPlots(ak4Jets,Zmasscut,"effPurity_allrecojets",tree)
plots+=cp.effPurityPlots(purityjets,Zmasscut,"effPurity_puritymatched",tree)
plots+=cp.effPurityPlots(pujets,Zmasscut,"effPurity_pujets",tree)

#PUPPI
plots+=cp.effPurityPlots(effPUPPIjets,Zmasscut,"effPurityPUPPI_effmatched", tree)
plots+=cp.effPurityPlots(ak4PUPPIJets,Zmasscut,"effPurityPUPPI_allrecojets",tree)
plots+=cp.effPurityPlots(purityPUPPIjets,Zmasscut,"effPurityPUPPI_puritymatched",tree)
plots+=cp.effPurityPlots(puPUPPIjets,Zmasscut,"effPurityPUPPI_pujets",tree)
#ABC
plots+=cp.effPurityPlots(effABCjets,Zmasscut,"effPurityABC_effmatched", tree)
plots+=cp.effPurityPlots(ak4ABCJets,Zmasscut,"effPurityABC_allrecojets",tree)
plots+=cp.effPurityPlots(purityABCjets,Zmasscut,"effPurityABC_puritymatched",tree)
plots+=cp.effPurityPlots(puABCjets,Zmasscut,"effPurityABC_pujets",tree)

#CHS
plots+=cp.responsePlots(matchedjets, Zmasscut, "Zmasscut_response",tree)
# plots+=cp.responsePlots(matchedjets, noLepton, "noLepton_response",tree)
plots+=cp.responsePlots(matchedjets, noSel, "hasTwoSFLeptons_response",tree)
#PUPPI
plots+=cp.responsePlots(matchedPUPPIjets, Zmasscut, "ZmasscutPUPPI_response",tree)
# plots+=cp.responsePlots(matchedjets, noLepton, "noLepton_response",tree)
plots+=cp.responsePlots(matchedPUPPIjets, noSel, "hasTwoSFLeptonsPUPPI_response",tree)
#ABC
plots+=cp.responsePlots(matchedABCjets, Zmasscut, "ZmasscutABC_response",tree)
# plots+=cp.responsePlots(matchedjets, noLepton, "noLepton_response",tree)
plots+=cp.responsePlots(matchedABCjets, noSel, "hasTwoSFLeptonsABC_response",tree)


#CHS
plots+=cp.AK4jetPlots(pujets, Zmasscut, "ZmasscutPuJets")
plots+=cp.AK4jetPlots(matchedjets, Zmasscut, "ZmasscutMatchedJets")
#PUPPI
plots+=cp.AK4jetPlots(puPUPPIjets, Zmasscut, "ZmasscutPuPUPPIJets")
plots+=cp.AK4jetPlots(matchedPUPPIjets, Zmasscut, "ZmasscutMatchedPUPPIJets")
#ABC
plots+=cp.AK4jetPlots(puABCjets, Zmasscut, "ZmasscutPuABCJets")
plots+=cp.AK4jetPlots(matchedABCjets, Zmasscut, "ZmasscutMatchedABCJets")


plots+=cp.eventPlots(tree, Zmasscut, "Zmasscut")
Expand Down
Loading