diff --git a/Analysis/include/SelectionResults.h b/Analysis/include/SelectionResults.h index a9edae73..f56f1cff 100755 --- a/Analysis/include/SelectionResults.h +++ b/Analysis/include/SelectionResults.h @@ -92,7 +92,9 @@ struct SelectionResultsV2 { virtual ~SelectionResultsV2() {} CandidateV2Ptr higgs; - Float_t numtruepileupinteractions; + Float_t numtruepileupinteractions =-1; + Float_t HT; + Double_t weightevt; bool Zveto; sv_fit::FitResults svfitResult; //kinematic_fit::four_body::FitResults kinfitResults; diff --git a/HHbbTauTau.files b/HHbbTauTau.files index f5f05122..93c9e786 100755 --- a/HHbbTauTau.files +++ b/HHbbTauTau.files @@ -221,6 +221,9 @@ microAODProduction/crab/TTBar_crab.py microAODProduction/crab/TTBar_sync_crab.py microAODProduction/crab/SyncTuple_crab.py microAODProduction/crab/SyncTuple_v2_crab.py +microAODProduction/crab/ReSynctupleProducer_crab.py +microAODProduction/crab/ReSynctupleProducer_DATA_crab.py +microAODProduction/crab/ReSynctupleProducer_Signal_crab.py microAODProduction/data/dummy.txt microAODProduction/interface/PatVertex.h microAODProduction/interface/BaseEDAnalyzer.h @@ -240,7 +243,9 @@ microAODProduction/python/miniAOD_skim.py microAODProduction/python/miniAOD_skim_Sync.py microAODProduction/python/miniAOD_skim_EleID.py microAODProduction/python/miniAOD_skim_EleID_DATA.py +microAODProduction/python/syncNtupler_cfi.py microAODProduction/python/syncTreeProducer_cfg.py +microAODProduction/python/skimmedBranches_cff.py microAODProduction/src/classes.h microAODProduction/src/classes_def.xml env.sh diff --git a/microAODProduction/crab/DY_crab.py b/microAODProduction/crab/DY_crab.py index d81dc860..8d58c969 100755 --- a/microAODProduction/crab/DY_crab.py +++ b/microAODProduction/crab/DY_crab.py @@ -1,18 +1,58 @@ from CRABClient.UserUtilities import config config = config() -config.General.requestName = 'DYJetsToLL_M-50_3rd' -config.General.workArea = 'DYJetsToLL' +config.General.workArea = 'DYJetsToLL_HT' config.JobType.pluginName = 'Analysis' config.JobType.psetName = '../python/miniAOD_skim_Sync.py' -config.JobType.pyCfgParams = ['sampleType=Spring15MC'] +config.JobType.pyCfgParams = ['sampleType=Spring15MC','computeHT=True'] -config.Data.inputDataset = '/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' config.Data.inputDBS = 'global' config.Data.splitting = 'EventAwareLumiBased' -config.Data.unitsPerJob = 15000 -config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ThirdProduction/' # or '/store/group/' +config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ThirdProduction/HTBinning/' # or '/store/group/' config.Data.publication = True config.Site.storageSite = 'T2_IT_Bari' + +if __name__ == '__main__': + + from CRABAPI.RawCommand import crabCommand + from CRABClient.ClientExceptions import ClientException + from httplib import HTTPException + + + def submit(config): + try: + crabCommand('submit', config = config) + except HTTPException as hte: + print "Failed submitting task: %s" % (hte.headers) + except ClientException as cle: + print "Failed submitting task: %s" % (cle) + + ################### + ## DYJets ## + ################### + config.General.requestName = 'DYJetsToLL_M-50' + config.Data.inputDataset = '/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 15000 + submit(config) + + config.General.requestName = 'DYJetsToLL_M-50_HT-100to200' + config.Data.inputDataset = '/DYJetsToLL_M-50_HT-100to200_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 6000 + submit(config) + + config.General.requestName = 'DYJetsToLL_M-50_HT-200to400' + config.Data.inputDataset = '/DYJetsToLL_M-50_HT-200to400_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 2000 + submit(config) + + config.General.requestName = 'DYJetsToLL_M-50_HT-400to600' + config.Data.inputDataset = '/DYJetsToLL_M-50_HT-400to600_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v2/MINIAODSIM' + config.Data.unitsPerJob = 3000 + submit(config) + + config.General.requestName = 'DYJetsToLL_M-50_HT-600toInf' + config.Data.inputDataset = '/DYJetsToLL_M-50_HT-600toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 2000 + submit(config) diff --git a/microAODProduction/crab/ReSynctupleProducer_DATA_crab.py b/microAODProduction/crab/ReSynctupleProducer_DATA_crab.py new file mode 100755 index 00000000..fca73a0e --- /dev/null +++ b/microAODProduction/crab/ReSynctupleProducer_DATA_crab.py @@ -0,0 +1,43 @@ +from CRABClient.UserUtilities import config +config = config() + +config.General.workArea = 'ReSyncTuple_Data' + +config.JobType.pluginName = 'Analysis' +config.JobType.psetName = '../python/syncTreeProducer_cfg.py' +config.JobType.pyCfgParams = ['isData=True','runOnCrab=True','sampleType=Run2015D'] + +config.Data.inputDBS = 'phys03' +config.Data.splitting = 'EventAwareLumiBased' +config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ReSyncTuple/' # or '/store/group/' +config.Data.publication = False + +config.Site.storageSite = 'T2_IT_Bari' + +if __name__ == '__main__': + + from CRABAPI.RawCommand import crabCommand + from CRABClient.ClientExceptions import ClientException + from httplib import HTTPException + + + def submit(config): + try: + crabCommand('submit', config = config) + except HTTPException as hte: + print "Failed submitting task: %s" % (hte.headers) + except ClientException as cle: + print "Failed submitting task: %s" % (cle) + + ################### + ## RunD ## + ################### + config.General.requestName = 'RunD' + config.Data.inputDataset = '/SingleMuon/ccaputo-crab_RunD_3rd-c953508963d94912a54c4204017e3a7a/USER' + config.Data.unitsPerJob = 8000 + submit(config) + + config.General.requestName = 'RunD_Oct' + config.Data.inputDataset = '/SingleMuon/ccaputo-crab_RunD_Oct_3rd-c953508963d94912a54c4204017e3a7a/USER' + config.Data.unitsPerJob = 8000 + submit(config) diff --git a/microAODProduction/crab/ReSynctupleProducer_Signal_crab.py b/microAODProduction/crab/ReSynctupleProducer_Signal_crab.py new file mode 100755 index 00000000..7bc21c4c --- /dev/null +++ b/microAODProduction/crab/ReSynctupleProducer_Signal_crab.py @@ -0,0 +1,37 @@ +from CRABClient.UserUtilities import config +config = config() + +config.General.workArea = 'ReSyncTuple_MC' +config.General.requestName = 'GluGluToRadionToHHTo2B2Tau_M-250' + +config.JobType.pluginName = 'Analysis' +config.JobType.psetName = '../python/syncTreeProducer_cfg.py' +config.JobType.pyCfgParams = ['isData=False','runOnCrab=True','computeHT=false'] + +config.Data.inputDataset = '/GluGluToRadionToHHTo2B2Tau_M-250_narrow_13TeV-madgraph/ccaputo-crab_GluGluToRadionToHHTo2B2Tau_M-250-46ffc704b6280aca3e8f5a327bcc5603/USER' +config.Data.inputDBS = 'phys03' +config.Data.splitting = 'EventAwareLumiBased' +config.Data.unitsPerJob = 1000 +config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ReSyncTuple/' # or '/store/group/' +config.Data.publication = False + +config.Site.storageSite = 'T2_IT_Bari' + +#if __name__ == '__main__': + +# from CRABAPI.RawCommand import crabCommand +# from CRABClient.ClientExceptions import ClientException +# from httplib import HTTPException + + +# def submit(config): +# try: +# crabCommand('submit', config = config) +# except HTTPException as hte: +# print "Failed submitting task: %s" % (hte.headers) +# except ClientException as cle: +# print "Failed submitting task: %s" % (cle) + +# ################### +# ## Hhh ## +# ################### diff --git a/microAODProduction/crab/ReSynctupleProducer_crab.py b/microAODProduction/crab/ReSynctupleProducer_crab.py new file mode 100755 index 00000000..e2f28cf2 --- /dev/null +++ b/microAODProduction/crab/ReSynctupleProducer_crab.py @@ -0,0 +1,97 @@ +from CRABClient.UserUtilities import config +config = config() + +config.General.workArea = 'ReSyncTuple_MC' + +config.JobType.pluginName = 'Analysis' +config.JobType.psetName = '../python/syncTreeProducer_cfg.py' +config.JobType.pyCfgParams = ['isData=False','runOnCrab=True'] + +config.Data.inputDBS = 'phys03' +config.Data.splitting = 'EventAwareLumiBased' +config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ReSyncTuple/' # or '/store/group/' +config.Data.publication = False + +config.Site.storageSite = 'T2_IT_Bari' + +if __name__ == '__main__': + + from CRABAPI.RawCommand import crabCommand + from CRABClient.ClientExceptions import ClientException + from httplib import HTTPException + + + def submit(config): + try: + crabCommand('submit', config = config) + except HTTPException as hte: + print "Failed submitting task: %s" % (hte.headers) + except ClientException as cle: + print "Failed submitting task: %s" % (cle) + + ################### + ## DiBoson ## + ################### + config.General.requestName = 'VVTo2L2Nu_13TeV' + config.Data.inputDataset = '/VVTo2L2Nu_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_VVTo2L2Nu_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 3000 + submit(config) + + config.General.requestName = 'ZZTo2L2Q_13TeV' + config.Data.inputDataset = '/ZZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_ZZTo2L2Q_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 5000 + submit(config) + + config.General.requestName = 'ZZTo4L_13TeV' + config.Data.inputDataset = '/ZZTo4L_13TeV-amcatnloFXFX-pythia8/ccaputo-crab_ZZTo4L_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 5000 + submit(config) + + config.General.requestName = 'WWTo1L1Nu2Q_13TeV' + config.Data.inputDataset = '/WWTo1L1Nu2Q_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_WWTo1L1Nu2Q_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 2000 + submit(config) + + config.General.requestName = 'WZTo2L2Q_13TeV' + config.Data.inputDataset = '/WZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_WZTo2L2Q_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 9000 + submit(config) + + config.General.requestName = 'WZJets_13TeV' + config.Data.inputDataset = '/WZJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/ccaputo-crab_WZJets_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 5000 + submit(config) + + config.General.requestName = 'WZTo1L3Nu_13TeV' + config.Data.inputDataset = '/WZTo1L3Nu_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_WZTo1L3Nu_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 700 + submit(config) + + config.General.requestName = 'WZTo1L1Nu2Q_13TeV' + config.Data.inputDataset = '/WZTo1L1Nu2Q_13TeV_amcatnloFXFX_madspin_pythia8/ccaputo-crab_WZTo1L1Nu2Q_13TeV-2470bbdf15448d116b7dc09c605c0dbb/USER' + config.Data.unitsPerJob = 7000 + submit(config) + + ################### + ## TTBar ## + ################### + config.General.requestName = 'TTbar_ext3' + config.Data.inputDataset = '/TT_TuneCUETP8M1_13TeV-powheg-pythia8/ccaputo-crab_TTbar_ext3_3rd-46ffc704b6280aca3e8f5a327bcc5603/USER' + config.Data.unitsPerJob = 40000 + submit(config) + +# ################### +# ## WJets ## +# ################### +# config.General.requestName = 'WJetsToLNu' +# config.Data.inputDataset = '/WJetsToLNu_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/ccaputo-crab_WJetsToLNu_3rd-46ffc704b6280aca3e8f5a327bcc5603/USER' +# config.Data.unitsPerJob = 50000 +# submit(config) + +# ################### +# ## DYJets ## +# ################### +# config.General.requestName = 'DYJetsToLL_M-50' +# config.Data.inputDataset = '/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/ccaputo-crab_DYJetsToLL_M-50_3rd-46ffc704b6280aca3e8f5a327bcc5603/USER' +# config.Data.unitsPerJob = 15000 +# submit(config) diff --git a/microAODProduction/crab/WJets_crab.py b/microAODProduction/crab/WJets_crab.py index 0f7c4195..60dcb0f8 100755 --- a/microAODProduction/crab/WJets_crab.py +++ b/microAODProduction/crab/WJets_crab.py @@ -1,18 +1,58 @@ from CRABClient.UserUtilities import config config = config() -config.General.requestName = 'WJetsToLNu_3rd' -config.General.workArea = 'WJetsToLNu' +config.General.workArea = 'WJetsToLNu_HT' config.JobType.pluginName = 'Analysis' config.JobType.psetName = '../python/miniAOD_skim_Sync.py' -config.JobType.pyCfgParams = ['sampleType=Spring15MC'] +config.JobType.pyCfgParams = ['sampleType=Spring15MC','computeHT=True'] -config.Data.inputDataset = '/WJetsToLNu_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' config.Data.inputDBS = 'global' config.Data.splitting = 'EventAwareLumiBased' -config.Data.unitsPerJob = 50000 -config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ThirdProduction/' # or '/store/group/' +config.Data.outLFNDirBase = '/store/user/ccaputo/HHbbtautau/Run2/ThirdProduction/HTBinning/' # or '/store/group/' config.Data.publication = True config.Site.storageSite = 'T2_IT_Bari' + +if __name__ == '__main__': + + from CRABAPI.RawCommand import crabCommand + from CRABClient.ClientExceptions import ClientException + from httplib import HTTPException + + + def submit(config): + try: + crabCommand('submit', config = config) + except HTTPException as hte: + print "Failed submitting task: %s" % (hte.headers) + except ClientException as cle: + print "Failed submitting task: %s" % (cle) + + ################### + ## WJets ## + ################### + config.General.requestName = 'WJetsToLNu' + config.Data.inputDataset = '/WJetsToLNu_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 50000 + submit(config) + + config.General.requestName = 'WJetsToLNu_HT-100to200' + config.Data.inputDataset = '/WJetsToLNu_HT-100To200_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 10000 + submit(config) + + config.General.requestName = 'WJetsToLNu_HT-200to400' + config.Data.inputDataset = '/WJetsToLNu_HT-200To400_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 8000 + submit(config) + + config.General.requestName = 'WJetsToLNu_HT-400to600' + config.Data.inputDataset = '/WJetsToLNu_HT-400To600_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 8000 + submit(config) + + config.General.requestName = 'WJetsToLNu_HT-600toInf' + config.Data.inputDataset = '/WJetsToLNu_HT-600ToInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring15MiniAODv2-74X_mcRun2_asymptotic_v2-v1/MINIAODSIM' + config.Data.unitsPerJob = 8000 + submit(config) diff --git a/microAODProduction/crab/multicrab b/microAODProduction/crab/multicrab new file mode 100755 index 00000000..8a03609f --- /dev/null +++ b/microAODProduction/crab/multicrab @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This is a small script that does the equivalent of multicrab. +""" +import os +from optparse import OptionParser + +from CRABAPI.RawCommand import crabCommand +from CRABClient.ClientExceptions import ClientException +from httplib import HTTPException + + +def getOptions(): + """ + Parse and return the arguments provided by the user. + """ + usage = ("Usage: %prog --crabCmd CMD [--workArea WAD --crabCmdOpts OPTS]" + "\nThe multicrab command executes 'crab CMD OPTS' for each project directory contained in WAD" + "\nUse multicrab -h for help") + + parser = OptionParser(usage=usage) + + parser.add_option('-c', '--crabCmd', + dest = 'crabCmd', + default = '', + help = "The crab command you want to execute for each task in DIR", + metavar = 'CMD') + + parser.add_option('-w', '--workArea', + dest = 'workArea', + default = '', + help = "work area directory (only if CMD != 'submit')", + metavar = 'WAD') + + parser.add_option('-o', '--crabCmdOpts', + dest = 'crabCmdOpts', + default = '', + help = "options for crab command CMD", + metavar = 'OPTS') + + (options, arguments) = parser.parse_args() + + if arguments: + parser.error("Found positional argument(s): %s." % (arguments)) + if not options.crabCmd: + parser.error("(-c CMD, --crabCmd=CMD) option not provided.") + if options.crabCmd != 'submit': + if not options.workArea: + parser.error("(-w WAR, --workArea=WAR) option not provided.") + if not os.path.isdir(options.workArea): + parser.error("'%s' is not a valid directory." % (options.workArea)) + + return options + + +def main(): + """ + Main + """ + options = getOptions() + + # If you want crabCommand to be quiet: + #from CRABClient.UserUtilities import setConsoleLogLevel + #from CRABClient.ClientUtilities import LOGLEVEL_MUTE + #setConsoleLogLevel(LOGLEVEL_MUTE) + # With this function you can change the console log level at any time. + + # To retrieve the current crabCommand console log level: + #from CRABClient.UserUtilities import getConsoleLogLevel + #crabConsoleLogLevel = getConsoleLogLevel() + + # If you want to retrieve the CRAB loggers: + #from CRABClient.UserUtilities import getLoggers + #crabLoggers = getLoggers() + + # Execute the command with its arguments for each directory inside the work area. + for dir in os.listdir(options.workArea): + projDir = os.path.join(options.workArea, dir) + if not os.path.isdir(projDir): + continue + # Execute the crab command. + msg = "Executing (the equivalent of): crab %s --dir %s %s" % (options.crabCmd, projDir, options.crabCmdOpts) + print "-"*len(msg) + print msg + print "-"*len(msg) + try: + crabCommand(options.crabCmd, dir = projDir, *options.crabCmdOpts.split()) + except HTTPException as hte: + print "Failed executing command %s for task %s: %s" % (options.crabCmd, projDir, hte.headers) + except ClientException as cle: + print "Failed executing command %s for task %s: %s" % (options.crabCmd, projDir, cle) + + +if __name__ == '__main__': + main() diff --git a/microAODProduction/interface/SyncTree.h b/microAODProduction/interface/SyncTree.h index 45d0e481..bb371b65 100755 --- a/microAODProduction/interface/SyncTree.h +++ b/microAODProduction/interface/SyncTree.h @@ -8,6 +8,9 @@ SIMPLE_VAR(Int_t, run) /* Run */ \ SIMPLE_VAR(Int_t, lumi) /* Lumi */ \ SIMPLE_VAR(ULong64_t, evt) /* Evt */ \ + SIMPLE_VAR(Int_t, eventType) /* event type category */ \ + SIMPLE_VAR(Int_t, HTBin) /* event type category */ \ + SIMPLE_VAR(Double_t, weightevt) /*Gen Event Weight*/ \ /* Event Variables */ \ SIMPLE_VAR(Int_t, npv) /* NPV */ \ SIMPLE_VAR(Float_t, npu) /* Number of in-time pu interactions added to the event */ \ @@ -108,6 +111,7 @@ VECTOR_VAR(Float_t, rawf_jets) /* factor to be applied to the jet p4 to obtain its uncorrected p4 */ \ VECTOR_VAR(Float_t, mva_jets) /* Jet MVA id value */ \ VECTOR_VAR(Float_t, csv_jets) /* Jet CSV value */ \ + VECTOR_VAR(Float_t, energy_jets) /* Jet mass value */ \ /* Second Jet : 2nd leading jet (in pt) afer applying Jet energy corrections (excluding Tau) */ \ /* SIMPLE_VAR(Float_t, jpt_2) Jet Pt after corrections */ \ /* SIMPLE_VAR(Float_t, jeta_2) Jet Eta */ \ @@ -124,6 +128,7 @@ VECTOR_VAR(Float_t, rawf_bjets) /* Btag factor to be applied to the jet p4 to obtain its uncorrected p4 */ \ VECTOR_VAR(Float_t, mva_bjets) /* Btag mva */ \ VECTOR_VAR(Float_t, csv_bjets) /* Btag CSV */ \ + VECTOR_VAR(Float_t, energy_bjets) /* Btag mass */ \ /* Candidate B Jets : subleading jet (in CSV ordering) passing (pt > 20 + eta < 2.4) */ \ /* SIMPLE_VAR(Float_t, bpt_2) Corrected BTag Pt */ \ /* SIMPLE_VAR(Float_t, beta_2) Btag Eta */ \ @@ -132,6 +137,7 @@ /* SIMPLE_VAR(Float_t, bmva_2) Btag mva */ \ /* SIMPLE_VAR(Float_t, bcsv_2) Btag CSV */ \ /**/ \ + SIMPLE_VAR(Float_t, HT) \ SIMPLE_VAR(Bool_t, dilepton_veto) /* Event is vetoed by the dilepton veto if true */ \ SIMPLE_VAR(Bool_t, extraelec_veto) /* Event is vetoed by the extra electron veto if true */ \ SIMPLE_VAR(Bool_t, extramuon_veto) /* Event is vetoed by the extra muon veto if true */ \ @@ -158,4 +164,10 @@ TREE_CLASS_INITIALIZE(Run2, SyncTree, SYNC_DATA) namespace Run2 { inline double DefaultFillValueForSyncTree() { return -10000; } +inline float DefaultFloatFillValueForSyncTree() { return std::numeric_limits::lowest(); } + +enum class HTbinning { lt100 = 0, f100to200 = 1, f200to400 = 2, f400to600 = 3, gt600 = 4 }; + } + + diff --git a/microAODProduction/plugins/SyncTreeProducer.cc b/microAODProduction/plugins/SyncTreeProducer.cc index 156c37d5..4efa4e27 100755 --- a/microAODProduction/plugins/SyncTreeProducer.cc +++ b/microAODProduction/plugins/SyncTreeProducer.cc @@ -25,6 +25,7 @@ // import LHEEventProduction definition #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -263,7 +264,10 @@ class SyncTreeProducer : public edm::EDAnalyzer { edm::EDGetTokenT triggerPrescales_; edm::EDGetTokenT triggerObjects_; edm::EDGetTokenT >> metCovMatrixTAG_; + edm::EDGetTokenT lheEventProduct_; + edm::EDGetTokenT genWeights_; + bool computeHT_; Run2::SyncTree syncTree; analysis::SyncAnalyzerData anaData; SelectionResultsV2_mutau selection; @@ -294,6 +298,9 @@ SyncTreeProducer::SyncTreeProducer(const edm::ParameterSet& iConfig): triggerObjects_(consumes(iConfig.getParameter("objects"))), metCovMatrixTAG_(consumes >>(iConfig.getParameter("metCov"))), + lheEventProduct_(mayConsume(iConfig.getParameter("lheEventProducts"))), + genWeights_(mayConsume(iConfig.getParameter("genEventInfoProduct"))), + computeHT_(iConfig.getParameter("HTBinning")), syncTree(&edm::Service()->file(),false), anaData("BeforCut.root"), sampleType(iConfig.getParameter("sampleType")) @@ -348,6 +355,7 @@ SyncTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu edm::Handle triggerObjects; iEvent.getByToken(triggerObjects_, triggerObjects); + edm::Handle > PUInfo; iEvent.getByToken(PUInfo_, PUInfo); @@ -387,23 +395,6 @@ SyncTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu */ - // access generator level HT -// edm::Handle lheEventProduct; -// iEvent.getByLabel(edm::InputTag("externalLHEProducer"), lheEventProduct); -// const lhef::HEPEUP& lheEvent = lheEventProduct->hepeup(); -// std::vector lheParticles = lheEvent.PUP; -// double lheHt = 0.; -// size_t numParticles = lheParticles.size(); -// for ( size_t idxParticle = 0; idxParticle < numParticles; ++idxParticle ) { -// int absPdgId = TMath::Abs(lheEvent.IDUP[idxParticle]); -// int status = lheEvent.ISTUP[idxParticle]; -// if ( status == 1 && ((absPdgId >= 1 && absPdgId <= 6) || absPdgId == 21) ) { // quarks and gluons -// lheHt += TMath::Sqrt(TMath::Power(lheParticles[idxParticle][0], 2.) + TMath::Power(lheParticles[idxParticle][1], 2.)); // first entry is px, second py -// } -// } -// std::cout<<" HT ============ > "< lheEventProduct; + iEvent.getByToken(lheEventProduct_, lheEventProduct); + const lhef::HEPEUP& lheEvent = lheEventProduct->hepeup(); + std::vector lheParticles = lheEvent.PUP; + double lheHt = 0.; + size_t numParticles = lheParticles.size(); + for ( size_t idxParticle = 0; idxParticle < numParticles; ++idxParticle ) { + int absPdgId = TMath::Abs(lheEvent.IDUP[idxParticle]); + int status = lheEvent.ISTUP[idxParticle]; + if ( status == 1 && ((absPdgId >= 1 && absPdgId <= 6) || absPdgId == 21) ) { // quarks and gluons + lheHt += TMath::Sqrt(TMath::Power(lheParticles[idxParticle][0], 2.) + TMath::Power(lheParticles[idxParticle][1], 2.)); // first entry is px, second py + } + } + selection.HT = lheHt; + //std::cout<<" HT ============ > "< genEvt; + iEvent.getByToken(genWeights_,genEvt); + // event weight + selection.weightevt=genEvt->weight(); + } + if(PUInfo.isValid()){ for(std::vector::const_iterator PVI = PUInfo->begin(); PVI != PUInfo->end(); ++PVI){ @@ -615,7 +632,6 @@ SyncTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu if ( jet.pt()>jetID::pt_loose && fabs(jet.eta()) btag::CSVL) bjetsCollection.push_back(jet_candidate); - } // const auto ptOrdering = [&] ( const CandidateV2Ptr& first, const CandidateV2Ptr& second ) -> bool @@ -938,7 +954,7 @@ double SyncTreeProducer::Fit(const CandidateV2Ptr& higgs, const analysis::Missin void SyncTreeProducer::FillSyncTree(const edm::Event& iEvent) { - // static const float default_value = Run2::DefaultFloatFillValueForFlatTree(); + static const float default_value = Run2::DefaultFloatFillValueForSyncTree(); // Event std::cout<<"~~~~~~~~~~~~~EVENT Info~~~~~~~~~"<(Run2::HTbinning::lt100); + if(100<=selection.HT && selection.HT<200) syncTree.HTBin() = static_cast(Run2::HTbinning::f100to200); + if(200<=selection.HT && selection.HT<400) syncTree.HTBin() = static_cast(Run2::HTbinning::f200to400); + if(400<=selection.HT && selection.HT<600) syncTree.HTBin() = static_cast(Run2::HTbinning::f400to600); + if(selection.HT>=600) syncTree.HTBin() = static_cast(Run2::HTbinning::gt600); // syncTree->eventType() = static_cast(selection.eventType); // syncTree->eventEnergyScale() = static_cast(eventEnergyScale); + } + else { + syncTree.HT() = default_value; + syncTree.HTBin() = -1; + } + + if (sampleType == "Spring15MC" || sampleType == "Fall15MC") syncTree.weightevt() = selection.weightevt; + else syncTree.weightevt() = default_value; syncTree.npv() = selection.vertices.size(); syncTree.npu() = selection.numtruepileupinteractions; diff --git a/microAODProduction/python/miniAOD_skim_Sync.py b/microAODProduction/python/miniAOD_skim_Sync.py index 4a4c4cf2..4221d4d2 100755 --- a/microAODProduction/python/miniAOD_skim_Sync.py +++ b/microAODProduction/python/miniAOD_skim_Sync.py @@ -25,11 +25,21 @@ from FWCore.ParameterSet.VarParsing import VarParsing options = VarParsing('analysis') +options.register ('isData', + False, + VarParsing.multiplicity.singleton, + VarParsing.varType.bool, + "Include Sim. Default: False") options.register ('sampleType', 'Fall15MC', VarParsing.multiplicity.singleton, VarParsing.varType.string, - "Indicates the sample type: Spring15MC, Fall15MC, Run2015B, Run2015C, Run2015D") + "Indicates the sample type: Spring15MC, Run2015B, Run2015C, Run2015D") +options.register ('computeHT', + 'False', + VarParsing.multiplicity.singleton, + VarParsing.varType.bool, + "Compute HT variable and HT binning") options.parseArguments() @@ -47,50 +57,32 @@ ## Events to process process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) +inputSignal_v2 = cms.untracked.vstring("file:768F5AFB-D771-E511-9ABD-B499BAABD280.root") + +DYSample = cms.untracked.vstring("/store/user/ccaputo/HHbbtautau/Run2/DYSample_forHT.root") + +Diboson = cms.untracked.vstring('root://xrootd.unl.edu//store/mc/RunIISpring15MiniAODv2/VVTo2L2Nu_13TeV_amcatnloFXFX_madspin_pythia8/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/10000/1A826380-CB6D-E511-BCFA-0025901D4D6E.root') -inputSignal = cms.untracked.vstring( - '/store/mc/RunIISpring15DR74/SUSYGluGluToHToTauTau_M-160_TuneCUETP8M1_13TeV-pythia8/MINIAODSIM/Asympt25ns_MCRUN2_74_V9-v1/10000/2CC6C6BD-5303-E511-9F70-0025905964CC.root') -inputTTbar = cms.untracked.vstring( - '/store/mc/RunIISpring15DR74/TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/Asympt25ns_MCRUN2_74_V9-v1/00000/022B08C4-C702-E511-9995-D4856459AC30.root') -inputWJets = cms.untracked.vstring( - '/store/mc/RunIISpring15DR74/WJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/Asympt25ns_MCRUN2_74_V9-v1/00000/048FB1EE-33FD-E411-A2BA-0025905A6094.root') -inputDY = cms.untracked.vstring( - '/store/mc/RunIISpring15DR74/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/MINIAODSIM/Asympt25ns_MCRUN2_74_V9-v3/10000/009D49A5-7314-E511-84EF-0025905A605E.root') -inputSignal_v2 = cms.untracked.vstring('/store/mc/RunIIFall15MiniAODv2/SUSYGluGluToHToTauTau_M-160_TuneCUETP8M1_13TeV-pythia8/MINIAODSIM/PU25nsData2015v1_76X_mcRun2_asymptotic_v12-v1/50000/12184969-3DB8-E511-879B-001E67504A65.root') ##inputSignal_v2 = cms.untracked.vstring( ## '/store/mc/RunIISpring15MiniAODv2/SUSYGluGluToHToTauTau_M-160_TuneCUETP8M1_13TeV-pythia8/MINIAODSIM/74X_mcRun2_asymptotic_v2-v1/40000/10563B6E-D871-E511-9513-B499BAABD280.root') ## Input files process.source = cms.Source("PoolSource", - fileNames = inputSignal_v2 + fileNames = Diboson ) ## Output file from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent -skimmedBranches = cms.untracked.vstring(['drop *', - 'keep edmTriggerResults_*__HLT', - 'keep edmTriggerResults_*__PAT', - 'keep PileupSummaryInfos_addPileupInfo__HLT', - 'keep PileupSummaryInfos_slimmedAddPileupInfo__PAT', - 'keep double_*__RECO', - 'keep recoBeamSpot_offlineBeamSpot__RECO', - 'keep *_electronMVAValueMapProducer_*_USER', ## Value Map with the electrons ID MVA values - 'keep floatedmValueMap_offlineSlimmedPrimaryVertices__PAT', - 'keep patPackedTriggerPrescales_patTrigger__PAT', - 'keep patElectrons_slimmedElectrons__PAT', - 'keep patJets_*__PAT', - 'keep patMETs_*__PAT', ## MET - 'keep patMuons_slimmedMuons__PAT', - 'keep patPackedCandidates_packedPFCandidates__PAT', - 'keep patPackedGenParticles_packedGenParticles__PAT', - 'keep patTaus_slimmedTaus__PAT', - 'keep patTriggerObjectStandAlones_selectedPatTrigger__PAT', - 'keep recoGenJets_slimmedGenJets__PAT', - 'keep recoGenParticles_prunedGenParticles__PAT', - 'keep recoVertexs_offlineSlimmedPrimaryVertices__PAT', - 'keep recoVertexCompositePtrCandidates_slimmedSecondaryVertices__PAT', - 'keep *_l1extraParticles_*_*', - 'keep *_METSignificance_*_USER']) +from HHbbTauTau.microAODProduction.skimmedBranches_cff import * + +if options.computeHT and not options.isData: + skimmedBranches = cms.untracked.vstring(BaseMCBranches+ + ['keep LHEEventProduct_externalLHEProducer__LHE']) +if not options.computeHT and not options.isData: + skimmedBranches = cms.untracked.vstring(BaseMCBranches) + +if options.isData: + skimmedBranches = cms.untracked.vstring(BaseDATABranches) allBranches = cms.untracked.vstring(['keep *']) @@ -133,24 +125,25 @@ #------------- # SyncTree Producer #------------- -process.synctupler = cms.EDAnalyzer('SyncTreeProducer', +process.syncNtupler = cms.EDAnalyzer('SyncTreeProducer', genParticles = cms.InputTag("genParticles"), # # Objects specific to MiniAOD format # - tauSrc = cms.InputTag("slimmedTaus"), - muonSrc = cms.InputTag("slimmedMuons"), - vtxSrc = cms.InputTag("offlineSlimmedPrimaryVertices"), - jetSrc = cms.InputTag("slimmedJets"), - PUInfo = cms.InputTag("slimmedAddPileupInfo"), - ##pfMETSrc = cms.InputTag("slimmedMETsNoHF"), - pfMETSrc = cms.InputTag("slimmedMETs"), - bits = cms.InputTag("TriggerResults","","HLT"), - prescales = cms.InputTag("patTrigger"), - objects = cms.InputTag("selectedPatTrigger"), - metCov = cms.InputTag("METSignificance","METCovariance"), + tauSrc = cms.InputTag("slimmedTaus"), + muonSrc = cms.InputTag("slimmedMuons"), + vtxSrc = cms.InputTag("offlineSlimmedPrimaryVertices"), + jetSrc = cms.InputTag("slimmedJets"), + ##pfMETSrc = cms.InputTag("slimmedMETsNoHF"), + pfMETSrc = cms.InputTag("slimmedMETs"), + bits = cms.InputTag("TriggerResults","","HLT"), + prescales = cms.InputTag("patTrigger"), + objects = cms.InputTag("selectedPatTrigger"), + lheEventProducts = cms.InputTag("externalLHEProducer"), + genEventInfoProduct = cms.InputTag("generator"), + HTBinning = cms.bool(options.computeHT), sampleType = cms.string(options.sampleType), ) @@ -159,7 +152,7 @@ process.METSignificance* process.egmGsfElectronIDSequence* process.bbttSkim* - process.synctupler + process.syncNtupler ) @@ -170,7 +163,7 @@ fileName = cms.untracked.string('microAOD.root'), SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ), outputCommands = skimmedBranches, - #outputCommands = tausBranch, + #outputCommands = HTBinBranches, #outputCommands = allBranches, dropMetaData = cms.untracked.string('ALL'), fastCloning = cms.untracked.bool(False), diff --git a/microAODProduction/python/skimmedBranches_cff.py b/microAODProduction/python/skimmedBranches_cff.py new file mode 100755 index 00000000..70f51932 --- /dev/null +++ b/microAODProduction/python/skimmedBranches_cff.py @@ -0,0 +1,48 @@ +import FWCore.ParameterSet.Config as cms + +BaseMCBranches = cms.untracked.vstring(['drop *', + 'keep GenEventInfoProduct_generator__SIM', + 'keep edmTriggerResults_*__HLT', + 'keep edmTriggerResults_*__PAT', + 'keep PileupSummaryInfos_addPileupInfo__HLT', + 'keep PileupSummaryInfos_slimmedAddPileupInfo__PAT', + 'keep double_*__RECO', + 'keep recoBeamSpot_offlineBeamSpot__RECO', + 'keep *_electronMVAValueMapProducer_*_USER', ## Value Map with the electrons ID MVA values + 'keep floatedmValueMap_offlineSlimmedPrimaryVertices__PAT', + 'keep patPackedTriggerPrescales_patTrigger__PAT', + 'keep patElectrons_slimmedElectrons__PAT', + 'keep patJets_*__PAT', + 'keep patMETs_*__PAT', ## MET + 'keep patMuons_slimmedMuons__PAT', + 'keep patPackedCandidates_packedPFCandidates__PAT', + 'keep patPackedGenParticles_packedGenParticles__PAT', + 'keep patTaus_slimmedTaus__PAT', + 'keep patTriggerObjectStandAlones_selectedPatTrigger__PAT', + 'keep recoGenJets_slimmedGenJets__PAT', + 'keep recoGenParticles_prunedGenParticles__PAT', + 'keep recoVertexs_offlineSlimmedPrimaryVertices__PAT', + 'keep recoVertexCompositePtrCandidates_slimmedSecondaryVertices__PAT', + 'keep *_l1extraParticles_*_*', + 'keep *_METSignificance_*_USER']) + +BaseDATABranches = cms.untracked.vstring(['drop *', + 'keep edmTriggerResults_*__HLT', + 'keep double_*__RECO', + 'keep *_electronMVAValueMapProducer_*_USER', ## Value Map with the electrons ID MVA values + 'keep floatedmValueMap_offlineSlimmedPrimaryVertices__RECO', + 'keep patPackedTriggerPrescales_patTrigger__RECO', + 'keep patElectrons_slimmedElectrons__RECO', + 'keep patJets_*__RECO', + 'keep patMETs_*__RECO', ## MET + 'keep patMuons_slimmedMuons__RECO', + 'keep patPackedCandidates_packedPFCandidates__RECO', + 'keep patPackedGenParticles_packedGenParticles__RECO', + 'keep patTaus_slimmedTaus__RECO', + 'keep patTriggerObjectStandAlones_selectedPatTrigger__RECO', + 'keep recoGenJets_slimmedGenJets__RECO', + 'keep recoGenParticles_prunedGenParticles__RECO', + 'keep recoVertexs_offlineSlimmedPrimaryVertices__RECO', + 'keep recoVertexCompositePtrCandidates_slimmedSecondaryVertices__RECO', + 'keep *_l1extraParticles_*_*', + 'keep *_METSignificance_*_USER']) diff --git a/microAODProduction/python/syncNtupler_cfi.py b/microAODProduction/python/syncNtupler_cfi.py new file mode 100755 index 00000000..29b1521a --- /dev/null +++ b/microAODProduction/python/syncNtupler_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +process.syncNtupler = cms.EDAnalyzer('SyncTreeProducer', + + genParticles = cms.InputTag("genParticles"), + # + # Objects specific to MiniAOD format + # + + tauSrc = cms.InputTag("slimmedTaus"), + muonSrc = cms.InputTag("slimmedMuons"), + vtxSrc = cms.InputTag("offlineSlimmedPrimaryVertices"), + jetSrc = cms.InputTag("slimmedJets"), + ##pfMETSrc = cms.InputTag("slimmedMETsNoHF"), + pfMETSrc = cms.InputTag("slimmedMETs"), + bits = cms.InputTag("TriggerResults","","HLT"), + prescales = cms.InputTag("patTrigger"), + objects = cms.InputTag("selectedPatTrigger"), + lheEventProducts = cms.InputTag("externalLHEProducer"), + HTBinning = cms.bool(options.computeHT), + sampleType = cms.string(options.sampleType), + ) diff --git a/microAODProduction/python/syncTreeProducer_cfg.py b/microAODProduction/python/syncTreeProducer_cfg.py index d8d244ba..5d67ef6e 100755 --- a/microAODProduction/python/syncTreeProducer_cfg.py +++ b/microAODProduction/python/syncTreeProducer_cfg.py @@ -41,7 +41,12 @@ 'Fall15MC', VarParsing.multiplicity.singleton, VarParsing.varType.string, - "Indicates the sample type: Spring15MC, Fall15MC, Run2015B, Run2015C, Run2015D") + "Indicates the sample type: Spring15MC, Run2015B, Run2015C, Run2015D") +options.register ('computeHT', + 'False', + VarParsing.multiplicity.singleton, + VarParsing.varType.bool, + "Compute HT variable and HT binning") options.parseArguments() @@ -96,7 +101,7 @@ #------------- # SyncTree Producer #------------- -process.synctupler = cms.EDAnalyzer('SyncTreeProducer', +from HHbbTauTau.microAODProduction.syncNtupler_cfi import syncNtupler genParticles = cms.InputTag("genParticles"), #