diff --git a/Makefile b/Makefile index 911bb9f0..bfe8293a 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,6 @@ LIB=-L$(BOOST)/lib -L/usr/lib64 # -L/usr/lib #### Make the list of modules from the list of .cc files in the SRC directory MODULES=$(shell ls $(SRCDIR)/*.cc | sed "s|.cc|.o|;s|$(SRCDIR)|$(OBJ_DIR)|g") -MODULESZFitter=../../Calibration/ZFitter/lib/EnergyScaleCorrection_class.o #### Make the list of dependencies for a particular module default: signalPdf.exe $(BUILDDIR)/analysis @@ -57,8 +56,6 @@ lib/%.o: $(SRCDIR)/%.cc @echo "--> Making $@" @$(COMPILE.cc) $(CXXFLAGS) $(INCLUDE) $(MAKEDEPEND) -o $@ $< -scales: ../../Calibration/ZFitter/lib/EnergyScaleCorrection_class.o -../../Calibration/ZFitter/lib/EnergyScaleCorrection_class.o: ../../Calibration/ZFitter/src/EnergyScaleCorrection_class.cc @echo "--> Making $@" @$(COMPILE.cc) $(CXXFLAGS) $(INCLUDE) $(MAKEDEPEND) -o $@ $< @@ -74,7 +71,7 @@ scales: ../../Calibration/ZFitter/lib/EnergyScaleCorrection_class.o $(BUILDDIR)/analysis: $(BUILDDIR)/analysis.cpp $(MODULES) $(MODULESZFitter) @echo "---> Making analysis $(COMPILE)" @g++ $(CXXFLAGS) $(INCLUDE) $(MAKEDEPEND) -o $@ $< $(MODULES) $(MODULESZFitter) $(LIB) $(ROOT_LIB) $(ROOFIT_LIB) $(ROOSTAT_LIB) $(ROOT_FLAGS) \ - -lboost_program_options -lTreePlayer $(CMSSW_BASE)/tmp/slc6_amd64_gcc491/src/FWCore/ParameterSet/src/FWCoreParameterSet/libFWCoreParameterSet.so + -lboost_program_options -lTreePlayer clean: rm -f $(OBJ_DIR)/*.o diff --git a/Systematics_To_Be_Evaluated.txt b/Systematics_To_Be_Evaluated.txt index 5d766b8b..81aa8f41 100644 --- a/Systematics_To_Be_Evaluated.txt +++ b/Systematics_To_Be_Evaluated.txt @@ -1,4 +1,8 @@ Smear_Muon_Scale Smear_Muon_ID_Iso +Smear_Muon_Resolution Smear_Electron_Scale +Smear_Electron_Resolution Smear_Jet_Scale +Smear_Jet_Resolution + diff --git a/bin/analysis.cpp b/bin/analysis.cpp index 65839342..32383c25 100644 --- a/bin/analysis.cpp +++ b/bin/analysis.cpp @@ -27,13 +27,12 @@ #include "FitRooDataSet.h" #include "rooFitFxns.h" #include "ToyThrower.h" +#include "JetResolution.h" #include "analysisTools.h" #include "configReader.h" #include -#include "Calibration/ZFitter/interface/EnergyScaleCorrection_class.hh" - #include #define _ENDSTRING std::string::npos //#define DEBUG @@ -46,6 +45,7 @@ DY TANDP POWHEG AMC MAD POWINCL W WZ ZZ +WW data TANDP */ @@ -59,7 +59,7 @@ class chainNames public: chainNames(): ///< default constructor all_modes( // list of all possible modes - {"TT", "W", "WZ", "ZZ", "data", "DYPOWHEG", "DYMADHT", "DYAMC", "DYMAD", "DYPOWINCL", "signal" + {"TT", "W", "WZ", "ZZ", "WW", "data", "DYPOWHEG", "DYMADHT", "DYAMC", "DYMAD", "DYPOWINCL", "signal" } ) { @@ -81,7 +81,7 @@ class chainNames } if(mode == "TT") { //TTchainNames.push_back("TTJets_DiLept_v1"); - TTchainNames.push_back("TTJets_DiLept_v2"); + TTchainNames.push_back("TTJets"); } else if(mode.find("DY") != _ENDSTRING) { //if(mode.Contains("TANDP") ) tree_channel = "_dytagandprobe"; std::string tagName = ""; @@ -91,30 +91,22 @@ class chainNames std::cout << "ERROR looking for DY in EMu channel" << std::endl; return TTchainNames; } - if(mode.find("POWHEG") != _ENDSTRING) { - TTchainNames.push_back("DYTo" + tagName + "_powheg_50to120"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_120to200"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_200to400"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_400to800"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_800to1400"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_1400to2300"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_2300to3500"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_3500to4500"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_4500to6000"); - TTchainNames.push_back("DYTo" + tagName + "_powheg_6000toInf"); - } else if(mode.find("AMC") != _ENDSTRING) { + if(mode.find("AMC") != _ENDSTRING) { //amc at nlo inclusive sample gen dilepton mass greater than 50 GeV TTchainNames.push_back("DYJets_amctnlo"); - } else if(mode.find("MAD") != _ENDSTRING) { - //madgraph inclusive sample gen dilepton mass greater than 50 GeV - TTchainNames.push_back("DYJets_madgraph"); + // } else if(mode.find("MAD") != _ENDSTRING) { + // //madgraph inclusive sample gen dilepton mass greater than 50 GeV + // TTchainNames.push_back("DYJets_madgraph"); } else if(mode.find("POWINCL") != _ENDSTRING && channel == Selector::EE) { TTchainNames.push_back("DYToEE_powheg"); } else if(mode.find("MADHT") != _ENDSTRING) { - TTchainNames.push_back("DYJets_madgraph_ht100to200"); - TTchainNames.push_back("DYJets_madgraph_ht200to400"); - TTchainNames.push_back("DYJets_madgraph_ht400to600"); - TTchainNames.push_back("DYJets_madgraph_ht600toInf"); + TTchainNames.push_back("DYJets_HT_100to200"); + TTchainNames.push_back("DYJets_HT_200to400"); + TTchainNames.push_back("DYJets_HT_400to600"); + TTchainNames.push_back("DYJets_HT_600to800"); + TTchainNames.push_back("DYJets_HT_800to1200"); + TTchainNames.push_back("DYJets_HT_1200to2500"); + TTchainNames.push_back("DYJets_HT_2500toInf"); } } else if(mode == "W") { TTchainNames.push_back("WJetsLNu"); @@ -122,14 +114,18 @@ class chainNames TTchainNames.push_back("WZ"); } else if(mode == "ZZ") { TTchainNames.push_back("ZZ"); + } else if(mode == "WW") { + TTchainNames.push_back("WW"); } else if(mode == "data") { std::string dataTag = ""; if(channel == Selector::EMu) dataTag = "MuEG"; if(channel == Selector::EE) dataTag = "DoubleEG"; if(channel == Selector::MuMu) dataTag = "SingleMu"; + //TTchainNames.push_back(dataTag + "_RunB"); TTchainNames.push_back(dataTag + "_RunC"); - TTchainNames.push_back(dataTag + "_RunD_v3"); - TTchainNames.push_back(dataTag + "_RunD_v4"); + //TTchainNames.push_back(dataTag + "_RunD"); + //TTchainNames.push_back(dataTag + "_RunE"); + //TTchainNames.push_back(dataTag + "_RunF"); } if(mode.find("WRto") != _ENDSTRING) { TTchainNames.push_back(mode); @@ -247,7 +243,7 @@ int main(int ac, char* av[]) } - EnergyScaleCorrection_class eSmearer("Calibration/ZFitter/data/scales_smearings/74X_Prompt_2015"); + //EnergyScaleCorrection_class eSmearer("ExoAnalysis/Calibration/ZFitter/data/scales_smearings/74X_Prompt_2015"); //------------------------------ check if modes given in the command line are allowed for(auto s : modes ) { @@ -260,12 +256,12 @@ int main(int ac, char* av[]) Selector::tag_t cut_channel; if(channel == Selector::EMu) { - cut_channel = Selector::getTag(channel_cut_str); + //cut_channel = Selector::getTag(channel_cut_str); //outFileTag += channel_cut_str; } else cut_channel = channel; - configReader myReader("configs/2015-v1.conf"); + configReader myReader("configs/2016-v1.conf"); if(debug) std::cout << myReader << std::endl; std::cout << "[INFO] Selected modes: \n"; @@ -296,6 +292,8 @@ int main(int ac, char* av[]) std::map< std::pair, std::pair > mass_cut = getMassCutMap(); std::vector mass_vec = getMassVec(); + TString dataPUfn = "MyDataPileupHistogramSingleMuonC.root"; + std::map pu_weights = PUreweight(dataPUfn); std::string treeName = "miniTree" + chainNames_.getTreeName(channel, isTagAndProbe, isLowDiLepton); unsigned long long zMass60to120EvtCount = 0; /// 0) { ///if there are electrons in the event, then write the electron SF and SF errors into the miniTreeEvent object named myEvent ///before calling the Selector constructor @@ -455,20 +455,6 @@ int main(int ac, char* av[]) #ifdef DEBUGG std::cout << "found an event passing preselection" << std::endl; #endif - for(unsigned int iEle = 0; iEle < nEle; ++iEle) { -#ifdef DEBUGG - std::cout << "looping over reco electrons in the event passing preselection" << std::endl; -#endif - TLorentzVector& p4 = (*myEvent.electrons_p4)[iEle]; - if(isData && !(channel_str == "MuMu") ) { //only scales are corrected HEEP and Reco ID SFs set to 1.0, errors set to 0., skip this step if the channel is not EE or EMu - (*myEvent.electron_scale)[iEle] = eSmearer.ScaleCorrection(myEvent.run, fabs(p4.Eta()) < 1.479, (*myEvent.electron_r9)[iEle], p4.Eta(), p4.Et()); - //(*myEvent.electron_scale)[iEle] = 1.0; - (*myEvent.electron_smearing)[iEle] = 0.; - } else if(!isData && !(channel_str == "MuMu") ) { // only the smearings are corrected, skip this step if the channel != EE or EMu (this could be entered when running over DYToLL samples) - (*myEvent.electron_scale)[iEle] = 1.; - (*myEvent.electron_smearing)[iEle] = eSmearer.getSmearingSigma(myEvent.run, fabs(p4.Eta()) < 1.479, (*myEvent.electron_r9)[iEle], p4.Eta(), p4.Et(), EnergyScaleCorrection_class::kRho, 0); - } - } myEventVector.push_back(myEvent); } myEvent.clear(); @@ -482,23 +468,21 @@ int main(int ac, char* av[]) bool loop_one = true; int seed_i = seed + 1; - // electron systematics! - bool Flag_Smear_Electron_Scale = false; - for(unsigned int iii = 0; iii < List_Systematics.size(); iii++) { - if(List_Systematics[iii] == "Smear_Electron_Scale") Flag_Smear_Electron_Scale = true; - } - - for(int i = 0; i < nToys + 1; ++i, ++seed_i) { - Rand.SetSeed(seed_i); + Rand.SetSeed(seed_i); + //for central values, we take the central value of Mu ID/ISO efficiencies and dont smear for JES systematics - // Roch and Electron scales are smeared with a pre-defined seed(1), to give conistent results. + // Roch and Electron scales are smeared with a pre-defined seed(1), to give consistent results. if(loop_one) { Random_Numbers_for_Systematics_Up_Down[0] = 0.;//Mu Eff ID Random_Numbers_for_Systematics_Up_Down[1] = 0.;//Mu Eff ISO - Random_Numbers_for_Systematics_Up_Down[2] = 0.; //Rand.Gaus(0.0, 1.);// Electron Scale(Data) - Random_Numbers_for_Systematics_Up_Down[3] = 0.;//JES + Random_Numbers_for_Systematics_Up_Down[2] = 0.;//Mu Res + Random_Numbers_for_Systematics_Up_Down[3] = 0.; //Electron Scale(Data) + Random_Numbers_for_Systematics_Up_Down[4] = 0.; //Electron Smear(MC) + Random_Numbers_for_Systematics_Up_Down[5] = 0.;//JES + Random_Numbers_for_Systematics_Up_Down[6] = 0.;//JER + } else { for(int Rand_Up_Down_Iter = 0; Rand_Up_Down_Iter < Total_Number_of_Systematics_Up_Down; Rand_Up_Down_Iter++) Random_Numbers_for_Systematics_Up_Down[Rand_Up_Down_Iter] = Rand.Gaus(0.0, 1.); @@ -545,35 +529,6 @@ int main(int ac, char* av[]) Random_Numbers_for_Systematics_Smear[Rand_Smear_Iter] = Rand.Gaus(0.0, 1.); ToyThrower( &myEventIt, Random_Numbers_for_Systematics_Smear, Random_Numbers_for_Systematics_Up_Down, seed_i, List_Systematics, isData); - - unsigned int nEle = myEventIt.electrons_p4->size(); - for(unsigned int iEle = 0; iEle < nEle; ++iEle) { - TLorentzVector& p4 = (*myEventIt.electrons_p4)[iEle]; - - if(isData) { //only scales are corrected -#ifdef DEBUG - std::cout << p4.Et() << "-->"; -#endif - p4 *= (*myEventIt.electron_scale)[iEle]; - // since the Random_Numbers_for_Systematics is the same for all the categories, then the uncertainties are considered fully correlated - if(loop_one == false && Flag_Smear_Electron_Scale) p4 *= 1 + Random_Numbers_for_Systematics_Up_Down[2] * eSmearer.ScaleCorrectionUncertainty(myEventIt.run, fabs(p4.Eta()) < 1.479, 0., p4.Eta(), p4.Et()); -#ifdef DEBUG - std::cout << p4.Et() << "\t" << p4.Eta() << "\t" << (*myEventIt.electron_r9)[iEle] << "\t" << (*myEventIt.electron_scale)[iEle] << "\t" << (eSmearer.ScaleCorrectionUncertainty(myEventIt.run, fabs(p4.Eta()) < 1.479, 0., p4.Eta(), p4.Et())) << std::endl; -#endif - } else { // only the smearings are corrected - double r = (loop_one == false && Flag_Smear_Electron_Scale) ? Rand.Gaus(0., 1.) : 0; - (*myEventIt.electron_smearing)[iEle] = eSmearer.getSmearingSigma(myEventIt.run, fabs(p4.Eta()) < 1.479, 0., p4.Eta(), p4.Et(), EnergyScaleCorrection_class::kRho, r); -#ifdef DEBUG - std::cout << p4.Et() << "-->"; -#endif - p4 *= Rand.Gaus(1., (*myEventIt.electron_smearing)[iEle]); -#ifdef DEBUG - std::cout << p4.Et() << "\t" << p4.Eta() << "\t" << (*myEventIt.electron_r9)[iEle] << "\t" << (*myEventIt.electron_smearing)[iEle] << "\t" << eSmearer.getSmearingSigma(myEventIt.run, fabs(p4.Eta()) < 1.479, 0., p4.Eta(), p4.Et(), EnergyScaleCorrection_class::kRho, 0) << "\t" << eSmearer.getSmearingSigma(myEventIt.run, fabs(p4.Eta()) < 1.479, 0., p4.Eta(), p4.Et(), EnergyScaleCorrection_class::kRho, r) << std::endl; -#endif - - } - } - Selector tmp_selEvent(myEventIt); selEvent = tmp_selEvent; // Select events with one good WR candidate @@ -582,22 +537,10 @@ int main(int ac, char* av[]) // 1 -- MuMuJJ Channel // 2 -- EMuJJ Channel - // if(debug && selEvent.isPassing(channel)) { - // std::cout << std::endl << selEvent.dilepton_mass << std::endl; - // std::cout << "Mu " << ev << std::endl; - // for(auto m : * (myEventIt.muons_p4)) - // std::cout << m.Pt() << " " << m.Eta() << std::endl; - // std::cout << "Ele" << std::endl; - // for(auto m : * (myEventIt.electrons_p4)) - // std::cout << m.Pt() << " " << m.Eta() << std::endl; - // std::cout << "Jet" << std::endl; - // for(auto m : * (myEventIt.jets_p4)) - // std::cout << m.Pt() << " " << m.Eta() << std::endl; - // } - if(loop_one && selEvent.isPassingLooseCuts(channel)) { if(isData == false) { - selEvent.weight *= myReader.getNorm1fb(selEvent.datasetName) * integratedLumi; // the weight is the event weight * single object weights + selEvent.weight *= myReader.getNorm1fb(selEvent.datasetName) * integratedLumi * pu_weights[int(selEvent.nPU)]; // the weight is the event weight * single object weights + #ifdef DEBUGG std::cout << "PU weight=\t" << selEvent.pu_weight << std::endl; std::cout << "num vertices=\t" << selEvent.nPV << std::endl; @@ -638,7 +581,7 @@ int main(int ac, char* av[]) if(isData == false) { - selEvent.weight *= myReader.getNorm1fb(selEvent.datasetName) * integratedLumi; // the weight is the event weight * single object weights + selEvent.weight *= myReader.getNorm1fb(selEvent.datasetName) * integratedLumi * pu_weights[int(selEvent.nPU)]; // the weight is the event weight * single object weights //multiply by an additional weight when processing DY samples if(mode.find("DY") != _ENDSTRING && !ignoreDyScaleFactors) { diff --git a/configs/2016-v1.conf b/configs/2016-v1.conf new file mode 100644 index 00000000..0aae50f4 --- /dev/null +++ b/configs/2016-v1.conf @@ -0,0 +1,6 @@ +datasetFile=configs/datasets_80X.dat +jsonFile=/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions16/13TeV/Cert_271036-280385_13TeV_PromptReco_Collisions16_JSON.txt +jsonName=246908-260627-Prompt_25ns-golden_silver-v1 +productionTAG=_WRv01 +skimProductionTAG=_WRv01 +unblind=false diff --git a/configs/datasets_80X.dat b/configs/datasets_80X.dat index 31a09143..2a508d79 100644 --- a/configs/datasets_80X.dat +++ b/configs/datasets_80X.dat @@ -1,45 +1,90 @@ #name dataset cross_sxn(pb) cross_sxn_err total_evts skimmed_dataset skimmed_events # Data ################################################## -DoubleEG_RunC /DoubleEG/Run2015C_25ns-27Jan2016-v2/MINIAOD - - 9666883 root://eoscms//eos/cms/store//user/shervin/skims/DoubleEG_RunC_SHv12/ - -DoubleEG_RunD /DoubleEG/Run2015D-04Dec2015-v2/MINIAOD - - 92858893 root://eoscms//eos/cms/store//user/shervin/skims/DoubleEG_RunD_v3_SHv12/ - +DoubleEG_RunB_v2 /DoubleEG/Run2016B-23Sep2016-v2/MINIAOD - - 5686987 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunB_v3 /DoubleEG/Run2016B-23Sep2016-v3/MINIAOD - - 143073268 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunC /DoubleEG/Run2016C-23Sep2016-v1/MINIAOD - - 47677856 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunD /DoubleEG/Run2016D-23Sep2016-v1/MINIAOD - - 53324960 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunE /DoubleEG/Run2016E-23Sep2016-v1/MINIAOD - - 49877710 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunF /DoubleEG/Run2016F-23Sep2016-v1/MINIAOD - - 34577629 root://eoscms//eos/cms/store//user/ - +DoubleEG_RunG /DoubleEG/Run2016G-23Sep2016-v1/MINIAOD - - 78797031 root://eoscms//eos/cms/store//user/ - # -SingleMu_RunC /SingleMuon/Run2015C_25ns-27Jan2016-v2/MINIAOD - - 8910558 root://eoscms//eos/cms/store//user/shervin/skims/SingleMu_RunC_SHv12/ - -SingleMu_RunD /SingleMuon/Run2015D-16Dec2015-v1/MINIAOD - - 91999861 root://eoscms//eos/cms/store//user/shervin/skims/SingleMu_RunD_v3_SHv12/ - +SingleMu_RunB_v1 /SingleMuon/Run2016B-23Sep2016-v1/MINIAOD - - 2789243 root://eoscms//eos/cms/store//user/ - +SingleMu_RunB_v3 /SingleMuon/Run2016B-23Sep2016-v3/MINIAOD - - 158145722 root://eoscms//eos/cms/store//user/ - +SingleMu_RunC /SingleMuon/Run2016C-23Sep2016-v1/MINIAOD - - 67441308 root://eoscms//eos/cms/store//user/ - +SingleMu_RunD /SingleMuon/Run2016D-23Sep2016-v1/MINIAOD - - 98017996 root://eoscms//eos/cms/store//user/ - +SingleMu_RunE /SingleMuon/Run2016E-23Sep2016-v1/MINIAOD - - 90984718 root://eoscms//eos/cms/store//user/ - +SingleMu_RunF /SingleMuon/Run2016F-23Sep2016-v1/MINIAOD - - 65489554 root://eoscms//eos/cms/store//user/ - +SingleMu_RunG /SingleMuon/Run2016G-23Sep2016-v1/MINIAOD - - 149916849 root://eoscms//eos/cms/store//user/ - # -MuEG_RunC /MuonEG/Run2015C_25ns-27Jan2016-v2/MINIAOD - - 408621 root://eoscms//eos/cms/store//user/shervin/skims/MuEG_RunC_SHv12/ - -MuEG_RunD /MuonEG/Run2015D-16Dec2015-v1/MINIAOD - - 13442593 root://eoscms//eos/cms/store//user/shervin/skims/MuEG_RunD_v3_SHv12/ - +MuEG_RunB_v2 /MuonEG/Run2016B-23Sep2016-v2/MINIAOD - - 225271 root://eoscms//eos/cms/store//user/ - +MuEG_RunB_v3 /MuonEG/Run2016B-23Sep2016-v3/MINIAOD - - 32727796 root://eoscms//eos/cms/store//user/ - +MuEG_RunC /MuonEG/Run2016C-23Sep2016-v1/MINIAOD - - 15405678 root://eoscms//eos/cms/store//user/ - +MuEG_RunD /MuonEG/Run2016D-23Sep2016-v1/MINIAOD - - 23482352 root://eoscms//eos/cms/store//user/ - +MuEG_RunE /MuonEG/Run2016E-23Sep2016-v1/MINIAOD - - 22519303 root://eoscms//eos/cms/store//user/ - +MuEG_RunF /MuonEG/Run2016F-23Sep2016-v1/MINIAOD - - 16002165 root://eoscms//eos/cms/store//user/ - +MuEG_RunG /MuonEG/Run2016G-23Sep2016-v1/MINIAOD - - 33854612 root://eoscms//eos/cms/store//user/ - # ################################################## -WJetsLNu /WJetsToLNu_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.027e+04 1.782e+02 28210360 root://eoscms//eos/cms/store//user/shervin/skims/WJetsLNu_SHv12/ - -WZ /WZ_TuneCUETP8M1_13TeV-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.340e+01 4.670e-02 1000000 root://eoscms//eos/cms/store//user/shervin/skims/WZ_SHv12/ - -ZZ /ZZ_TuneCUETP8M1_13TeV-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.015e+01 2.284e-02 989312 root://eoscms//eos/cms/store//user/shervin/skims/ZZ_SHv12/ - +WJetsLNu /WJetsToLNu_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.027e+04 1.782e+02 28210360 root://eoscms//eos/cms/store//user/ - +WZ /WZ_TuneCUETP8M1_13TeV-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.340e+01 4.670e-02 1000000 root://eoscms//eos/cms/store//user/ - +ZZ /ZZ_TuneCUETP8M1_13TeV-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.015e+01 2.284e-02 989312 root://eoscms//eos/cms/store//user/ - +WW /WW_TuneCUETP8M1_13TeV-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 6.321e+01 2.284e-02 993214 root://eoscms//eos/cms/store//user/ - # ########## -TTJets_DiLept_v1 /TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v4/MINIAODSIM 8.567e+01 2.215e-01 6058236 root://eoscms//eos/cms/store//user/shervin/skims/TTJets_DiLept_v1_SHv12/ - -TTJets_DiLept_v2 /TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0_ext1-v1/MINIAODSIM 8.567e+01 2.215e-01 24623997 root://eoscms//eos/cms/store//user/shervin/skims/TTJets_DiLept_v2_SHv12/ - +TTJets_DiLept_v1 /TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v4/MINIAODSIM 8.567e+01 2.215e-01 6058236 root://eoscms//eos/cms/store//user/ - +TTJets_DiLept_v2 /TTJets_DiLept_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0_ext1-v1/MINIAODSIM 8.567e+01 2.215e-01 24623997 root://eoscms//eos/cms/store//user/ - +TTJets /TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/RunIISpring16MiniAODv2-PUSpring16RAWAODSIM_reHLT_80X_mcRun2_asymptotic_v14-v1/MINIAODSIM 8.32e+02 2.215e-01 11478414 root://eoscms//eos/cms/store//user/ - # ################## -DYJets_amctnlo /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 28696958 root://eoscms//eos/cms/store//user/shervin/skims/DYJets_amctnlo_SHv12/ - -DYJets_madgraph /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0_ext1-v1/MINIAODSIM 5.991e+03 1.796e+01 49877138 root://eoscms//eos/cms/store//user/shervin/skims/DYJets_madgraph_SHv12/ - -# ################## -DYToEE_powheg /DYToEE_NNPDF30_13TeV-powheg-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.803e+03 0.000e+00 49496146 root://eoscms//eos/cms/store/caf/user/shervin/DYToEE_powheg_SHv12/ - -### -DYToMuMu_powheg_50to120 /ZToMuMu_NNPDF30_13TeV-powheg_M_50_120/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v2/MINIAODSIM 1.975e+03 9.496e-01 2967200 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_50to120_SHv12/ - -DYToMuMu_powheg_120to200 /ZToMuMu_NNPDF30_13TeV-powheg_M_120_200/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.932e+01 1.269e-02 99200 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_120to200_SHv12/ - -DYToMuMu_powheg_200to400 /ZToMuMu_NNPDF30_13TeV-powheg_M_200_400/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.731e+00 1.836e-03 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_200to400_SHv12/ - -DYToMuMu_powheg_400to800 /ZToMuMu_NNPDF30_13TeV-powheg_M_400_800/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.410e-01 1.665e-04 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_400to800_SHv12/ - -DYToMuMu_powheg_800to1400 /ZToMuMu_NNPDF30_13TeV-powheg_M_800_1400/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.678e-02 1.186e-05 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_800to1400_SHv12/ - -DYToMuMu_powheg_1400to2300 /ZToMuMu_NNPDF30_13TeV-powheg_M_1400_2300/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.390e-03 2.639e-03 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_1400to2300_SHv12/ - -DYToMuMu_powheg_2300to3500 /ZToMuMu_NNPDF30_13TeV-powheg_M_2300_3500/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 8.948e-05 6.068e-08 99200 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_2300to3500_SHv12/ - -DYToMuMu_powheg_3500to4500 /ZToMuMu_NNPDF30_13TeV-powheg_M_3500_4500/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 4.135e-06 2.480e-09 95200 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_3500to4500_SHv12/ - -DYToMuMu_powheg_4500to6000 /ZToMuMu_NNPDF30_13TeV-powheg_M_4500_6000/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 4.560e-07 2.574e-10 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_4500to6000_SHv12/ - -DYToMuMu_powheg_6000toInf /ZToMuMu_NNPDF30_13TeV-powheg_M_6000_Inf/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.066e-08 2.020e-11 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToMuMu_powheg_6000toInf_SHv12/ - -## -DYToEE_powheg_50to120 /ZToEE_NNPDF30_13TeV-powheg_M_50_120/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.975e+03 9.957e-01 2912000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_50to120_SHv12/ - -DYToEE_powheg_120to200 /ZToEE_NNPDF30_13TeV-powheg_M_120_200/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.932e+01 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_120to200_SHv12/ - -DYToEE_powheg_200to400 /ZToEE_NNPDF30_13TeV-powheg_M_200_400/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.731e+00 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_200to400_SHv12/ - -DYToEE_powheg_400to800 /ZToEE_NNPDF30_13TeV-powheg_M_400_800/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.410e-01 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_400to800_SHv12/ - -DYToEE_powheg_800to1400 /ZToEE_NNPDF30_13TeV-powheg_M_800_1400/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.678e-02 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_800to1400_SHv12/ - -DYToEE_powheg_1400to2300 /ZToEE_NNPDF30_13TeV-powheg_M_1400_2300/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v14-v1/MINIAODSIM 1.390e-03 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_1400to2300_SHv12/ - -DYToEE_powheg_2300to3500 /ZToEE_NNPDF30_13TeV-powheg_M_2300_3500/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 8.948e-05 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_2300to3500_SHv12/ - -DYToEE_powheg_3500to4500 /ZToEE_NNPDF30_13TeV-powheg_M_3500_4500/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 4.135e-06 9.957e-01 100000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_3500to4500_SHv12/ - -DYToEE_powheg_4500to6000 /ZToEE_NNPDF30_13TeV-powheg_M_4500_6000/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 4.560e-07 9.957e-01 99000 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_4500to6000_SHv12/ - -DYToEE_powheg_6000toInf /ZToEE_NNPDF30_13TeV-powheg_M_6000_Inf/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.066e-08 9.957e-01 0 root://eoscms//eos/cms/store//user/shervin/skims/DYToEE_powheg_6000toInf_SHv12/ - +DYJets_amctnlo /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8/RunIISpring16MiniAODv2-PUSpring16RAWAODSIM_reHLT_80X_mcRun2_asymptotic_v14-v1/MINIAODSIM 5.915e+03 3.414e+01 83290772 root://eoscms//eos/cms/store//user/ - +DYJets_madgraph /DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0_ext1-v1/MINIAODSIM 5.991e+03 1.796e+01 49877138 root://eoscms//eos/cms/store//user/ - +# DYJets HT Binned +DYJets_HT_100to200 /DYJetsToLL_M-50_HT-100to200_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.473e+02 - 2738021 root://eoscms//eos/cms/store//user/ - +DYJets_HT_200to400 /DYJetsToLL_M-50_HT-200to400_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 4.101e+01 - 944458 root://eoscms//eos/cms/store//user/ - +DYJets_HT_400to600 /DYJetsToLL_M-50_HT-400to600_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.695e+00 - 1070454 root://eoscms//eos/cms/store//user/ - +DYJets_HT_600to800 /DYJetsToLL_M-50_HT-600to800_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.347e+00 - 8232153 root://eoscms//eos/cms/store//user/ - +DYJets_HT_600toInf /DYJetsToLL_M-50_HT-600toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 2.180e+00 - 1034084 root://eoscms//eos/cms/store//user/ - +DYJets_HT_800to1200 /DYJetsToLL_M-50_HT-800to1200_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 6.285e-01 - 2650775 root://eoscms//eos/cms/store//user/ - +DYJets_HT_1200to2500 /DYJetsToLL_M-50_HT-1200to2500_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 1.509e-01 - 616612 root://eoscms//eos/cms/store//user/ - +DYJets_HT_2500toInf /DYJetsToLL_M-50_HT-2500toInf_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 3.655e-03 - 376260 root://eoscms//eos/cms/store//user/ - +# ################################## +TTWJets /ttWJets_13TeV_madgraphMLM/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +T6ttWW /SMS-T6ttWW_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16MiniAODv2-PUSpring16Fast_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_TTWLL /ST_tWll_5f_LO_13TeV-MadGraph-pythia8/RunIISpring16MiniAODv2-premix_withHLT_80X_mcRun2_asymptotic_v14-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_TWNuNu /ST_tWnunu_5f_LO_13TeV-MadGraph-pythia8/RunIISpring16MiniAODv2-premix_withHLT_80X_mcRun2_asymptotic_v14-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_tbar /ST_tW_antitop_5f_NoFullyHadronicDecays_13TeV-powheg_TuneCUETP8M1/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_tbarinc /ST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_t /ST_tW_top_5f_NoFullyHadronicDecays_13TeV-powheg_TuneCUETP8M1/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v1/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +SingleTop_tinc /ST_tW_top_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1/RunIISpring16MiniAODv2-PUSpring16_80X_mcRun2_asymptotic_2016_miniAODv2_v0-v2/MINIAODSIM 5.915e+03 3.414e+01 15000 root://eoscms//eos/cms/store//user/ - +# ################################## +WRtoEEJJ_800_400_v1 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-800_ToLNu-400_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 4.106e+00 5.652e-02 15000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_1600_800_v1 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-1600_ToLNu-800_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 2.053e-01 2.471e-03 15000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_2400_1200_v1 /WR-ToLNu_GEN_SIM_13TeV-2016/gnegro-WR-2400_ToLNu-1200_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 2.492e-02 2.863e-04 15004 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_3200_1600_v1 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-3200_ToLNu-1600_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 4.064e-03 4.530e-05 14750 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_4000_2000_v1 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-4000_ToLNu-2000_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 7.710e-04 7.921e-06 15000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_6000_3000_v1 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-6000_ToLNu-3000_ToEEJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 1.312e-05 1.033e-07 15000 root://eoscms//eos/cms/store//user/ - +# +WRtoEEJJ_800_400_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-800_ToLNu-400_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 4.158e+00 5.769e-02 34000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_1600_800_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-1600_ToLNu-800_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 2.106e-01 2.548e-03 35000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_2400_1200_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-2400_ToLNu-1200_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 2.535e-02 2.952e-04 34750 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_3200_1600_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-3200_ToLNu-1600_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 4.176e-03 4.657e-05 35000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_4000_2000_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-4000_ToLNu-2000_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 7.733e-04 7.959e-06 35000 root://eoscms//eos/cms/store//user/ - +WRtoEEJJ_6000_3000_v2 /WR-ToLNu-ToEEJJ_GEN_SIM_13TeV-2016/gnegro-WR-6000_ToLNu-3000_ToEEJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 1.318e-05 1.032e-07 34750 root://eoscms//eos/cms/store//user/ - # ################################## +WRtoMuMuJJ_800_400_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-800_ToLNu-400_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 4.194e+00 3.813e-02 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_1600_800_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-1600_ToLNu-800_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 2.092e-01 1.651e-03 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_2400_1200_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-2400_ToLNu-1200_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 2.553e-02 2.563e-04 25000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_3200_1600_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-3200_ToLNu-1600_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 4.152e-03 4.621e-05 25000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_4000_2000_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-4000_ToLNu-2000_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 7.532e-04 7.767e-06 23000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_6000_3000_v1 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-6000_ToLNu-3000_ToMuMuJJ_miniAOD_13TeV-2016-b59cb78551aff289588aa5c69db4a3a1/USER 1.303e-05 1.003e-07 16000 root://eoscms//eos/cms/store//user/ - +# +WRtoMuMuJJ_800_400_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-800_ToLNu-400_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 4.022e+00 5.600e-02 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_1600_800_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-1600_ToLNu-800_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 2.103e-01 2.512e-03 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_2400_1200_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-2400_ToLNu-1200_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 2.571e-02 2.978e-04 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_3200_1600_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-3200_ToLNu-1600_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 4.148e-03 4.606e-05 15000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_4000_2000_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-4000_ToLNu-2000_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 7.773e-04 8.005e-06 14750 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_6000_3000_v2 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-6000_ToLNu-3000_ToMuMuJJ_miniAOD_13TeV-2016-v2-b59cb78551aff289588aa5c69db4a3a1/USER 1.312e-05 1.023e-07 15000 root://eoscms//eos/cms/store//user/ - +# +WRtoMuMuJJ_800_400_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-800_ToLNu-400_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 4.129e+00 5.771e-02 20000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_1600_800_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-1600_ToLNu-800_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 2.098e-01 2.514e-03 20000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_2400_1200_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-2400_ToLNu-1200_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 2.503e-02 2.937e-04 10000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_3200_1600_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-3200_ToLNu-1600_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 4.117e-03 4.511e-05 10000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_4000_2000_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-4000_ToLNu-2000_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 7.631e-04 7.853e-06 12000 root://eoscms//eos/cms/store//user/ - +WRtoMuMuJJ_6000_3000_v3 /WR-ToLNu-ToMuMuJJ_GEN_SIM_13TeV-2016/gnegro-WR-6000_ToLNu-3000_ToMuMuJJ_miniAOD_13TeV-2016-v3-b59cb78551aff289588aa5c69db4a3a1/USER 1.326e-05 1.069e-07 19000 root://eoscms//eos/cms/store//user/ - \ No newline at end of file diff --git a/interface/JetResolution.h b/interface/JetResolution.h new file mode 100644 index 00000000..9ce9e744 --- /dev/null +++ b/interface/JetResolution.h @@ -0,0 +1,13 @@ +#ifndef jetres_h +#define jetres_h + +#include "ExoAnalysis/cmsWR/interface/miniTreeEvent.h" + +#include "TRandom3.h" + +#include +#include + +void JetResolution(miniTreeEvent *myEvent, TRandom3 rand, bool isData); + +#endif diff --git a/interface/Objects.h b/interface/Objects.h index 42de1672..90ffb5b5 100644 --- a/interface/Objects.h +++ b/interface/Objects.h @@ -5,8 +5,12 @@ class myElectron { public: TLorentzVector p4; - Float_t scale; - Float_t smearing; + Float_t scale_error; + Float_t smearing_sigma; + Float_t smearing_sigma_phi_up; + Float_t smearing_sigma_phi_down; + Float_t smearing_sigma_rho_up; + Float_t smearing_sigma_rho_down; Int_t charge; Float_t r9; Float_t weight; @@ -16,8 +20,6 @@ class myElectron Float_t IDSF_error; Float_t RecoSF_error; Float_t HltSF_error; - Float_t scale_error; - Float_t smearing_error; myElectron() {}; ///< default contructor (empty) @@ -47,6 +49,11 @@ class myJet TLorentzVector p4; Float_t jec_uncertainty; Float_t weight; + Float_t JER; + Float_t JER_sf; + Float_t JER_sf_up; + Float_t JER_sf_down; + myJet() {}; ///< default contructor (empty) diff --git a/interface/RoccoR.h b/interface/RoccoR.h new file mode 100644 index 00000000..fda1b976 --- /dev/null +++ b/interface/RoccoR.h @@ -0,0 +1,215 @@ +#ifndef ElectroWeakAnalysis_RoccoR +#define ElectroWeakAnalysis_RoccoR +#include "TRandom3.h" +#include "TMath.h" + +#include "iostream" +#include "fstream" +#include "sstream" + +using namespace std; +using std::cout; +using std::endl; +using std::vector; + +struct CrystalBall{ + static const double pi; + static const double SPiO2; + static const double S2; + + double m; + double s; + double a; + double n; + + double B; + double C; + double D; + double N; + + double NA; + double Ns; + double NC; + double F; + double G; + double k; + + double cdfMa; + double cdfPa; + + CrystalBall(){ + init(0, 1, 10, 10); + } + CrystalBall(double m_, double s_, double a_, double n_){ + init(m_, s_, a_, n_); + } + + void init(double m_, double s_, double a_, double n_){ + m=m_; + s=s_; + a=a_; + n=n_; + + double fa = fabs(a); + double expa = exp(-fa*fa/2); + double A = pow(n/fa, n)*expa; + double C1 = n/fa/(n-1)*expa; + double D1 = 2*SPiO2*erf(fa/S2); + + B = n/fa-fa; + C = (D1+2*C1)/C1; + D = (D1+2*C1)/2; + + N = 1.0/s/(D1+2*C1); + k = 1.0/(n-1); + + NA = N*A; + Ns = N*s; + NC = Ns*C1; + F = 1-fa*fa/n; + G = s*n/fa; + + cdfMa=cdf(m-a*s); + cdfPa=cdf(m+a*s); + } + + double pdf(double x){ + double d=(x-m)/s; + if(d<-a) return NA*pow(B-d, -n); + if(d> a) return NA*pow(B+d, -n); + return N*exp(-d*d/2); + } + + double cdf(double x){ + double d = (x-m)/s; + if(d<-a) return NC / pow(F-s*d/G, n-1); + if(d> a) return NC * (C - pow(F+s*d/G, 1-n) ); + return Ns*(D-SPiO2*erf(-d/S2)); + } + + double invcdf(double u){ + if(ucdfPa) return m - G*(F - pow(C-u/NC, -k) ); + return m - S2*s*TMath::ErfInverse((D - u/Ns ) / SPiO2); + } +}; + +class RocRes{ + private: + static const int NMAXETA=12; + static const int NMAXTRK=12; + + int NETA; + int NTRK; + int NMIN; + + double BETA[NMAXETA+1]; + double ntrk[NMAXETA][NMAXTRK+1]; + double dtrk[NMAXETA][NMAXTRK+1]; + + double width[NMAXETA][NMAXTRK]; + double alpha[NMAXETA][NMAXTRK]; + double power[NMAXETA][NMAXTRK]; + + double rmsA[NMAXETA][NMAXTRK]; + double rmsB[NMAXETA][NMAXTRK]; + double rmsC[NMAXETA][NMAXTRK]; + + double kDat[NMAXETA]; + double kRes[NMAXETA]; + + TRandom3 random; //only used while deriving corrections now + + int getBin(double x, const int NN, const double *b); + + + public: + enum TYPE {MC, Data, Extra}; + + CrystalBall cb[NMAXETA][NMAXTRK]; + + RocRes(); + int getEtaBin(double feta); + int getNBinDT(double v, int H); + int getNBinMC(double v, int H); + void dumpParams(); + void init(string filename); + + ~RocRes(){} + + double Sigma(double pt, int H, int F); + double kSpreadDet(double gpt, double rpt, double eta, int nlayers, double w); + double kSmearDet(double pt, double eta, TYPE type, double v, double u); + double kExtraDet(double pt, double eta, int nlayers, double u, double w); + void fillFitData(int &H, int &F, int &D, double &xmc, double &xdt, double &Rmc, double &Rdt, double pt, double eta); +}; + + +class RocOne{ + private: + enum TYPE{MC, DT}; + static const int NMAXETA=24; + static const int NMAXPHI=16; + static const double MPHI; + + int NETA; + int NPHI; + + double BETA[NMAXETA+1]; + double DPHI; + + double M[2][NMAXETA][NMAXPHI]; + double A[2][NMAXETA][NMAXPHI]; + double D[2][NMAXETA]; + + RocRes RR; + + int getBin(double x, const int NN, const double *b); + int getBin(double x, const int nmax, const double xmin, const double dx); + + public: + RocOne(); + ~RocOne(){} + RocOne(string filename, int iTYPE=0, int iSYS=0, int iMEM=0); + bool checkSYS(int iSYS, int iMEM, int kSYS=0, int kMEM=0); + bool checkTIGHT(int iTYPE, int iSYS, int iMEM, int kTYPE=0, int kSYS=0, int kMEM=0); + void init(string filename, int iTYPE=0, int iSYS=0, int iMEM=0); + + double kScaleDT(int Q, double pt, double eta, double phi); + double kScaleMC(int Q, double pt, double eta, double phi, double kSMR=1); + double kScaleAndSmearMCDet(int Q, double pt, double eta, double phi, int nlayers, double u, double w); + double kScaleFromGenMCDet(int Q, double pt, double eta, double phi, double gpt, int nlayers, double w); + double kGenSmearDet(double pt, double eta, double v, double u); +}; + + +class RoccoR{ + public: + static const int Nset=5; + enum TYPE{Default, Stat, ModPt, CorDM, FitDM}; + static const int Nmem[Nset]; + + RoccoR(); //temporary, will change + RoccoR(std::string dirname); //temporary, will change + ~RoccoR(); + + double kScaleDT(int Q, double pt, double eta, double phi, TYPE T, int m); + + double kScaleAndSmearMCDet(int Q, double pt, double eta, double phi, int nlayers); //only for default, non-reproducible + double kScaleFromGenMCDet(int Q, double pt, double eta, double phi, double gpt, int nlayers); //only for default, non-reproducible + + double kScaleAndSmearMCDet(int Q, double pt, double eta, double phi, int nlayers, double u, double w, TYPE T, int m); + double kScaleFromGenMCDet(int Q, double pt, double eta, double phi, double gpt, int nlayers, double w, TYPE T, int m); + + std::vector > kkScaleAndSmearMCDet(int Q, double pt, double eta, double phi, int nlayers); + std::vector > kkScaleFromGenMCDet(int Q, double pt, double eta, double phi, double gpt, int nlayers); + + private: + TRandom3 random; + RocOne *RC[Nset][100]; + +}; + + +#endif + diff --git a/interface/Selector.h b/interface/Selector.h index 9d98727b..88f8f053 100644 --- a/interface/Selector.h +++ b/interface/Selector.h @@ -66,14 +66,22 @@ class Selector Float_t lead_lepton_IsoSF_error; Float_t lead_lepton_RecoSF_error; Float_t lead_lepton_HltSF_error; - Float_t lead_lepton_ESmearing_error; Float_t lead_lepton_EScaling_error; + Float_t lead_lepton_ESmearing_sigma; + Float_t lead_lepton_ESmearing_sigma_phi_up; + Float_t lead_lepton_ESmearing_sigma_phi_down; + Float_t lead_lepton_ESmearing_sigma_rho_up; + Float_t lead_lepton_ESmearing_sigma_rho_down; Float_t sublead_lepton_IDSF_error; Float_t sublead_lepton_IsoSF_error; Float_t sublead_lepton_RecoSF_error; Float_t sublead_lepton_HltSF_error; - Float_t sublead_lepton_ESmearing_error; Float_t sublead_lepton_EScaling_error; + Float_t sublead_lepton_ESmearing_sigma; + Float_t sublead_lepton_ESmearing_sigma_phi_up; + Float_t sublead_lepton_ESmearing_sigma_phi_down; + Float_t sublead_lepton_ESmearing_sigma_rho_up; + Float_t sublead_lepton_ESmearing_sigma_rho_down; Double_t nPU; /// #include #include +#include #include "Selector.h" #include "RooAbsPdf.h" @@ -9,49 +10,128 @@ using namespace RooFit; typedef std::map< std::pair, std::pair > mass_cut_map_t; +static const int MAX_PU_REWEIGHT = 59; mass_cut_map_t getMassCutMap() { - mass_cut_map_t mass_cut; - std::ifstream ifs; - ifs.open("configs/mass_cuts.txt", std::ifstream::in); - std::string line; - std::string mass, ch, low, high; - while (std::getline(ifs, line)) { - if (line[0] == '#' || line.size() == 0) continue; - std::stringstream ss(line); - std::getline(ss, ch, ' '); - std::getline(ss, mass, ' '); - std::getline(ss, low, ' '); - std::getline(ss, high, ' '); - mass_cut[std::make_pair(Selector::getTag(ch), std::stoi(mass))] = std::make_pair(std::stoi(low), std::stoi(high)); - } - - return mass_cut; + mass_cut_map_t mass_cut; + std::ifstream ifs; + ifs.open("configs/mass_cuts.txt", std::ifstream::in); + std::string line; + std::string mass, ch, low, high; + while (std::getline(ifs, line)) { + if (line[0] == '#' || line.size() == 0) continue; + std::stringstream ss(line); + std::getline(ss, ch, ' '); + std::getline(ss, mass, ' '); + std::getline(ss, low, ' '); + std::getline(ss, high, ' '); + mass_cut[std::make_pair(Selector::getTag(ch), std::stoi(mass))] = std::make_pair(std::stoi(low), std::stoi(high)); + } + + return mass_cut; } std::vector getMassVec() { - std::vector mass; - std::ifstream ifs; - ifs.open("configs/mass_cuts.txt", std::ifstream::in); - std::string line; - std::string m; - while (std::getline(ifs, line)) { - if (line[0] == '#' || line.size() == 0) continue; - std::stringstream ss(line); - std::getline(ss, m, ' '); - std::getline(ss, m, ' '); - mass.push_back(std::stoi(m)); - } - - return mass; + std::vector mass; + std::ifstream ifs; + ifs.open("configs/mass_cuts.txt", std::ifstream::in); + std::string line; + std::string m; + while (std::getline(ifs, line)) { + if (line[0] == '#' || line.size() == 0) continue; + std::stringstream ss(line); + std::getline(ss, m, ' '); + std::getline(ss, m, ' '); + mass.push_back(std::stoi(m)); + } + + return mass; } double NormalizedIntegral(RooAbsPdf * function, RooRealVar& integrationVar, double lowerLimit, double upperLimit) { - integrationVar.setRange("integralRange", lowerLimit, upperLimit) ; - RooAbsReal* integral = (*function).createIntegral(integrationVar, NormSet(integrationVar), Range("integralRange")) ; - double normalizedIntegralValue = integral->getVal(); - return normalizedIntegralValue; + integrationVar.setRange("integralRange", lowerLimit, upperLimit) ; + RooAbsReal* integral = (*function).createIntegral(integrationVar, NormSet(integrationVar), Range("integralRange")) ; + double normalizedIntegralValue = integral->getVal(); + return normalizedIntegralValue; +} + +std::map PUreweight(TString PileupDataFilename) +{ + TFile data(PileupDataFilename); + TFile mc("MCPileup.root"); + + if(!data.IsOpen() || !mc.IsOpen()) { + std::cerr << "[ERROR] data or mc PU file not opened" << std::endl; + exit(1); + } + + TH1D* puMC_hist = (TH1D*) mc.Get("pileup"); + if(puMC_hist == NULL) { + std::cerr << "[ERROR] mc pileup histogram is NULL" << std::endl; + exit(1); + } + + TH1D *puData_hist = (TH1D *) data.Get("pileup"); + if(puData_hist == NULL) { + std::cerr << "[ERROR] data pileup histogram is NULL" << std::endl; + exit(1); + } + + // they should have bin width = 1 + if(puMC_hist->GetBinWidth(2) != 1) { + std::cerr << "[ERROR] Bin width for mc pileup distribution different from 1" << std::endl; + exit(1); + } + + if(puData_hist->GetBinWidth(2) != 1) { + std::cerr << "[ERROR] Bin width for data pileup distribution different from 1" << std::endl; + exit(1); + } + + // they should have the same binning otherwise PU weights until the max between them + int nBins = MAX_PU_REWEIGHT; + if(puData_hist->GetNbinsX() != puMC_hist->GetNbinsX()) { + std::cerr << "[WARNING] Different binning between data and mc pileup distributions:" << puData_hist->GetNbinsX() << "\t" << puMC_hist->GetNbinsX() << std::endl; + nBins = std::min(puData_hist->GetNbinsX(), puMC_hist->GetNbinsX()); + //std::cerr << "Pileup reweighted until nPU max = " << nBins; + } + + nBins = std::min(MAX_PU_REWEIGHT, nBins); + + // Normalize Histograms + float puMC_int = puMC_hist->Integral(0, nBins); + float puData_int = puData_hist->Integral(0, nBins); + puMC_hist->Scale(1. / puMC_int); + puData_hist->Scale(1. / puData_int); + + double puMCweight_int = 0; + std::map pu_weights; + for (int i = 0; i < nBins; i++) { + double binContent = puMC_hist->GetBinContent(i + 1); + if(binContent == 0 && puData_hist->GetBinContent(i + 1) != 0) { + if(puData_hist->GetBinContent(i + 1) < 1e-4 || i < 4) { + std::cerr << "[WARNING] mc bin empty while data not: iBin = " << i + 1 << std::endl; + std::cerr << " data bin = " << puData_hist->GetBinContent(i + 1) << std::endl; + } else { + std::cerr << "[WARNING] mc bin empty while data not: iBin = " << i + 1 << std::endl; + std::cerr << " data bin = " << puData_hist->GetBinContent(i + 1) << std::endl; + puData_hist->SetBinContent(i + 1, 1e-4); + } + } + double weight = binContent > 0 ? puData_hist->GetBinContent(i + 1) / binContent : 0; + // the MC normalization should not change, so calculate the + // integral of the MC and rescale the weights by that + puMCweight_int += weight * binContent; + pu_weights[i] = weight; + } + + for (int i = 0; i < nBins; i++) { + pu_weights[i] /= puMCweight_int; + } + + + return pu_weights; } diff --git a/interface/miniTreeEvent.h b/interface/miniTreeEvent.h index 2f328a3c..c1c94af5 100644 --- a/interface/miniTreeEvent.h +++ b/interface/miniTreeEvent.h @@ -26,8 +26,12 @@ class miniTreeEvent // UInt_t run_time; std::vector * electrons_p4; - std::vector * electron_scale; - std::vector * electron_smearing; + std::vector * electron_scale_error; + std::vector * electron_smearing_sigma; + std::vector * electron_smearing_sigma_phi_up; + std::vector * electron_smearing_sigma_phi_down; + std::vector * electron_smearing_sigma_rho_up; + std::vector * electron_smearing_sigma_rho_down; std::vector * electron_r9; std::vector * electron_charge; @@ -49,6 +53,13 @@ class miniTreeEvent std::vector * jets_p4; std::vector * jec_uncertainty; + std::vector * jetResolution; + std::vector * JER_sf; + std::vector * JER_sf_up; + std::vector * JER_sf_down; + std::vector * genJetPt; + std::vector * genJetMatch; + Float_t nPU; Int_t nPV; diff --git a/interface/muresolution_run2.h b/interface/muresolution_run2.h deleted file mode 100644 index 756d8c23..00000000 --- a/interface/muresolution_run2.h +++ /dev/null @@ -1,194 +0,0 @@ -#ifndef ElectroWeakAnalysis_MuResolution -#define ElectroWeakAnalysis_MuResolution - -#include "TRandom3.h" -#include "TMath.h" - -struct CrystalBall { - const double pi = TMath::Pi(); - const double SPiO2 = sqrt(TMath::Pi() / 2.0); - const double S2 = sqrt(2.0); - - double m; - double s; - double a; - double n; - - double B; - double C; - double D; - double N; - - double NA; - double Ns; - double NC; - double F; - double G; - double k; - - double cdfMa; - double cdfPa; - - CrystalBall(): m(0), s(1), a(10), n(10) {} - CrystalBall(double m_, double s_, double a_, double n_) - { - init(m_, s_, a_, n_); - } - - void init(double m_, double s_, double a_, double n_) - { - m = m_; - s = s_; - a = a_; - n = n_; - - double fa = fabs(a); - double expa = exp(-fa * fa / 2); - double A = pow(n / fa, n) * expa; - double C1 = n / fa / (n - 1) * expa; - double D1 = 2 * SPiO2 * erf(fa / S2); - - B = n / fa - fa; - C = (D1 + 2 * C1) / C1; - D = (D1 + 2 * C1) / 2; - - N = 1.0 / s / (D1 + 2 * C1); - k = 1.0 / (n - 1); - - NA = N * A; - Ns = N * s; - NC = Ns * C1; - F = 1 - fa * fa / n; - G = s * n / fa; - - cdfMa = cdf(m - a * s); - cdfPa = cdf(m + a * s); - } - - double pdf(double x) - { - double d = (x - m) / s; - if(d < -a) return NA * pow(B - d, -n); - if(d > a) return NA * pow(B + d, -n); - return N * exp(-d * d / 2); - } - - double cdf(double x) - { - double d = (x - m) / s; - if(d < -a) return NC / pow(F - s * d / G, n - 1); - if(d > a) return NC * (C - pow(F + s * d / G, 1 - n) ); - return Ns * (D - SPiO2 * erf(-d / S2)); - } - - double invcdf(double u) - { - if(u < cdfMa) return m + G * (F - pow(NC / u, k) ); - if(u > cdfPa) return m - G * (F - pow(C - u / NC, -k) ); - return m - S2 * s * TMath::ErfInverse((D - u / Ns ) / SPiO2); - } -}; - - -class muresolution -{ - -public: - - static const int NETA = 12; - static const int NTRK = 12; - static const int NMIN = 6; //minimum number of layers; - - enum TYPE {MC, Data, Extra}; - - muresolution() - { - for(int H = 0; H < NETA; ++H) { - for(int F = 0; F < NTRK; ++F) { - cb[H][F].init(0.0, width[H][F], alpha[H][F], power[H][F]); - } - } - } - - ~muresolution() {} - - double Sigma(double pt, int H, int F) - { - double dpt = pt - 45; - return rmsA[H][F] + rmsB[H][F] * dpt + rmsC[H][F] * dpt * dpt; - } - - double kSmear(double pt, double eta, int nlayers = 0, TYPE type = Extra) - { - int H = getBin(fabs(eta), NETA, BETA); - int F = nlayers - NMIN; - const double (&trk) [NTRK + 1] = type == Data ? dtrk[H] : mtrk[H]; - if (F < 0 || F >= NTRK) F = getBin(random.Rndm(), NTRK, trk); - - double x = -2; - while(1 + x <= 0) { - double u = random.Rndm(); - if(type == Extra) { - double v = random.Uniform(mtrk[H][F], mtrk[H][F + 1]); - int D = getBin(v, NTRK, dtrk[H]); - double RD = kDat[H] * Sigma(pt, H, D); - double RM = kRes[H] * Sigma(pt, H, F); - if(RD > RM) { - double rn = cb[H][F].invcdf(u); - if(fabs(rn) > 5.0) rn = 0.0; - x = sqrt(RD * RD - RM * RM) * rn; - } else x = 0; - } else if(type == Data) x = kDat[H] * Sigma(pt, H, F) * cb[H][F].invcdf(u); - else x = kRes[H] * Sigma(pt, H, F) * cb[H][F].invcdf(u); - } - - return 1.0 / (1.0 + x); - } - - double kSpread(double gpt, double rpt, double eta, int nlayers) - { - int H = getBin(fabs(eta), NETA, BETA); - int F = nlayers - NMIN; - double v = random.Uniform(mtrk[H][F], mtrk[H][F + 1]); - int D = getBin(v, NTRK, dtrk[H]); - double u = random.Rndm(); - double xd = kDat[H] * Sigma(gpt, H, D) * cb[H][D].invcdf(u); - double xm = kRes[H] * Sigma(gpt, H, F) * cb[H][F].invcdf(u); - double kold = gpt / rpt; - double knew = 1.0 + (kold - 1.0) * xd / xm; - if(knew < 0) return kSmear(rpt, eta, nlayers, Extra); - return kold / knew; - } - - //static const double BETA[NETA+1]; - const double BETA[NETA + 1] = {0.00, 0.20, 0.40, 0.60, 0.80, 1.00, 1.20, 1.40, 1.60, 1.85, 2.10, 2.25, 2.40}; - - static const double mtrk[NETA][NTRK + 1]; - static const double dtrk[NETA][NTRK + 1]; - - static const double width[NETA][NTRK]; - static const double alpha[NETA][NTRK]; - static const double power[NETA][NTRK]; - - static const double rmsA[NETA][NTRK]; - static const double rmsB[NETA][NTRK]; - static const double rmsC[NETA][NTRK]; - - //static const double kDat[NETA]; - //static const double kRes[NETA]; - const double kDat[NETA] = {0.957838, 0.998524, 0.991463, 0.949789, 0.995753, 0.9626, 0.91684, 0.891457, 0.961592, 1.03829 * 0.948057, 0.969482 * 0.97541, 1.02167 * 0.952802}; - const double kRes[NETA] = {1.01101, 0.928442, 0.887687, 0.938112, 0.86722, 0.86134, 0.893858, 0.89179, 0.923499, 0.878776 * 1.03576, 0.85004 * 1.02033, 0.928083 * 0.975536}; - - CrystalBall cb[NETA][NTRK]; //base - - TRandom3 random; - - int getBin(double x, const int NN, const double *b) - { - for(int i = 0; i < NN; ++i) if(x < b[i + 1]) return i; - return NN - 1; - } - -}; - -#endif diff --git a/interface/rochcor2015.h b/interface/rochcor2015.h deleted file mode 100644 index b2147239..00000000 --- a/interface/rochcor2015.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef ROCHCOR2015_H -#define ROCHCOR2015_H - -#include -#include -#include "TChain.h" -#include "TClonesArray.h" -#include "TString.h" - -#include "TSystem.h" -#include "TROOT.h" -#include "TMath.h" -#include "TLorentzVector.h" -#include "TRandom3.h" - -class rochcor2015 -{ -public: - rochcor2015(); - rochcor2015(int seed); - ~rochcor2015(); - - void momcor_mc(TLorentzVector&, float, int, float&); - void momcor_data(TLorentzVector&, float, int, float&); - - int aetabin(double); - int etabin(double); - int phibin(double); - -private: - - TRandom3 eran; - TRandom3 sran; - - // static float netabin[9] = {-2.4,-2.1,-1.4,-0.7,0.0,0.7,1.4,2.1,2.4}; - const double pi = TMath::Pi(); - static const double netabin[25]; - static const double anetabin[13]; - - static constexpr double mu_mass = 0.105658; - static constexpr double genm_smr = 9.09901e+01; //gen mass peak with eta dependent gaussian smearing => better match in Z mass profile vs. eta/phi - static constexpr double genm = 91.06; //gen mass peak without smearing => Z mass profile vs. eta/phi in CMS note - - static constexpr double mrecm = 9.08821e+01; //rec mass peak in MC - static constexpr double drecm = 9.09900e+01; //rec mass peak in data - static constexpr double mgscl_stat = 4.53668e-05; //stat. error of global factor for mass peak in MC - static constexpr double mgscl_syst = 3.81651e-03; //syst. error of global factor for mass peak in MC - static constexpr double dgscl_stat = 3.57033e-05; //stat. error of global factor for mass peak in data - static constexpr double dgscl_syst = 0.0008; //syst. error of global factor for mass peak in data - - //static const double sf[3]; - //static const double sfer[3]; - - //--------------------------------------------------------------------------------------------- - - static const double dcor_bf[16][24]; - static const double dcor_ma[16][24]; - static const double mcor_bf[16][24]; - static const double mcor_ma[16][24]; - static const double dcor_bfer[16][24]; - static const double dcor_maer[16][24]; - static const double mcor_bfer[16][24]; - static const double mcor_maer[16][24]; - - //======================================================================================================= - - static const double dmavg[16][24]; - static const double dpavg[16][24]; - static const double mmavg[16][24]; - static const double mpavg[16][24]; - - static const double dd[12]; - static const double dder[12]; - static const double md[12]; - static const double mder[12]; - - static const double dscl[24]; - static const double mscl[24]; - //=============================================================================================== - - double mptsys_mc_dm[16][24]; - double mptsys_mc_da[16][24]; - double mptsys_da_dm[16][24]; - double mptsys_da_da[16][24]; - - double gscler_mc_dev; - double gscler_da_dev; - - -}; - -#endif diff --git a/interface/rochcor2016.h b/interface/rochcor2016.h new file mode 100644 index 00000000..d611f5f6 --- /dev/null +++ b/interface/rochcor2016.h @@ -0,0 +1,106 @@ +#ifndef ROCHCOR2016_H +#define ROCHCOR2016_H + +#include +#include +#include "TChain.h" +#include "TClonesArray.h" +#include "TString.h" + +#include "TSystem.h" +#include "TROOT.h" +#include "TMath.h" +#include "TLorentzVector.h" +#include "TRandom3.h" + +#include "RoccoR.h" + +class rochcor2016 { + public: + rochcor2016(); + rochcor2016(int seed); + ~rochcor2016(); + + void momcor_mc(TLorentzVector&, float, int, float&); + void momcor_data(TLorentzVector&, float, int, float&); + + int aetabin(double); + int etabin(double); + int phibin(double); + + private: + + TRandom3 eran; + TRandom3 sran; + + // static float netabin[9] = {-2.4,-2.1,-1.4,-0.7,0.0,0.7,1.4,2.1,2.4}; + const double pi = TMath::Pi(); + static const double netabin[25]; + static const double anetabin[13]; + + static constexpr double mu_mass = 0.105658; + + static constexpr double mgscl = 1.00128; //global scale in MC + static constexpr double dgscl = 1.00245; //global scale in data + static constexpr double mgscl_stat = 2.57065e-05; //stat. error of global factor for mass peak in MC + static constexpr double mgscl_syst = 3.81651e-03; //syst. error of global factor for mass peak in MC + static constexpr double dgscl_stat = 3.34256e-05; //stat. error of global factor for mass peak in data + static constexpr double dgscl_syst = 0.0008; //syst. error of global factor for mass peak in data + static constexpr double dgscl_iter = 1.00026; //one more iteration to fix offset + static constexpr double mgscl_iter = 1.00054; //one more iteration to fix offset + //static const double sf[3]; + //static const double sfer[3]; + + //--------------------------------------------------------------------------------------------- + /* + static const double dcor_m[16][24]; + static const double dcor_p[16][24]; + static const double mcor_m[16][24]; + static const double mcor_p[16][24]; + static const double dcor_mer[16][24]; + static const double dcor_per[16][24]; + static const double mcor_mer[16][24]; + static const double mcor_per[16][24]; + */ + + static const double dcor_bf[16][24]; + static const double dcor_ma[16][24]; + static const double mcor_bf[16][24]; + static const double mcor_ma[16][24]; + static const double dcor_bfer[16][24]; + static const double dcor_maer[16][24]; + static const double mcor_bfer[16][24]; + static const double mcor_maer[16][24]; + + //======================================================================================================= + + static const double dmavg[16][24]; + static const double dpavg[16][24]; + static const double mmavg[16][24]; + static const double mpavg[16][24]; + static const double dmavger[16][24]; + static const double dpavger[16][24]; + static const double mmavger[16][24]; + static const double mpavger[16][24]; + + static const double dd[12]; + static const double dder[12]; + static const double md[12]; + static const double mder[12]; + + static const double dscl[24]; + static const double mscl[24]; + //=============================================================================================== + + double mptsys_mc_dm[16][24]; + double mptsys_mc_da[16][24]; + double mptsys_da_dm[16][24]; + double mptsys_da_da[16][24]; + + double gscler_mc_dev; + double gscler_da_dev; + + +}; + +#endif diff --git a/plugins/BuildFile.xml b/plugins/BuildFile.xml index d478468d..639e5b21 100644 --- a/plugins/BuildFile.xml +++ b/plugins/BuildFile.xml @@ -1,13 +1,6 @@ - - - - - - - + - @@ -19,11 +12,24 @@ - + + - - + + + + + + + + + + + + + + diff --git a/plugins/PUAnalyzer.cc b/plugins/PUAnalyzer.cc new file mode 100644 index 00000000..bda54338 --- /dev/null +++ b/plugins/PUAnalyzer.cc @@ -0,0 +1,58 @@ +#include "TTree.h" +#include "TLorentzVector.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "DataFormats/PatCandidates/interface/Muon.h" +#include "DataFormats/PatCandidates/interface/Electron.h" +#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DataFormats/JetReco/interface/Jet.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" +#include "DataFormats/Common/interface/ValueMap.h" +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" + +class PUAnalyzer : public edm::EDAnalyzer +{ +public: + explicit PUAnalyzer(const edm::ParameterSet&); + +private: + virtual void analyze(const edm::Event&, const edm::EventSetup&); + + edm::EDGetToken pileUpInfoToken_; + + TH1F * h_pileup; + +}; + +PUAnalyzer::PUAnalyzer(const edm::ParameterSet& cfg): + + pileUpInfoToken_ ( consumes >(edm::InputTag("slimmedAddPileupInfo"))) + +{ + edm::Service fs; + + h_pileup = fs->make("pileup", "pileup", 50, 0, 50); + } + +void PUAnalyzer::analyze(const edm::Event& event, const edm::EventSetup&) +{ + + edm::Handle > PU_Info; + + if(!event.isRealData()) { + event.getByToken(pileUpInfoToken_, PU_Info); + for(auto p : *PU_Info) { + int BX = p.getBunchCrossing(); + if(BX == 0) + h_pileup->Fill(p.getTrueNumInteractions()); + } + } + + + +} + +DEFINE_FWK_MODULE(PUAnalyzer); diff --git a/plugins/Weight.cc b/plugins/Weight.cc new file mode 100644 index 00000000..3d4f1b48 --- /dev/null +++ b/plugins/Weight.cc @@ -0,0 +1,75 @@ +#include "TTree.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "DataFormats/PatCandidates/interface/Muon.h" +#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DataFormats/JetReco/interface/Jet.h" +#include "DataFormats/JetReco/interface/GenJetCollection.h" +#include "DataFormats/Math/interface/deltaPhi.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" + +class Weight : public edm::EDAnalyzer +{ +public: + explicit Weight(const edm::ParameterSet&); + +private: + virtual void analyze(const edm::Event&, const edm::EventSetup&); + + edm::EDGetToken evinfoToken_; + + struct tree_t { + unsigned run; + unsigned lumi; + unsigned event; + + float weight; + + tree_t() + { + clear(); + } + + void clear() + { + run = lumi = event = 0; + weight = 0; + } + }; + + TTree* tree; + tree_t nt; +}; + +Weight::Weight(const edm::ParameterSet& cfg) : + evinfoToken_ ( consumes(edm::InputTag("generator"))) +{ + edm::Service fs; + tree = fs->make("t", ""); + tree->Branch("run", &nt.run, "run/i"); + tree->Branch("lumi", &nt.lumi, "lumi/i"); + tree->Branch("event", &nt.event, "event/i"); + + tree->Branch("weight", &nt.weight, "weight/F"); +} + +void Weight::analyze(const edm::Event& event, const edm::EventSetup&) +{ + nt.clear(); + nt.run = event.id().run(); + nt.lumi = event.luminosityBlock(); + nt.event = event.id().event(); + + edm::Handle evinfo; + event.getByToken(evinfoToken_, evinfo); + nt.weight = evinfo->weight(); + + tree->Fill(); +} + +DEFINE_FWK_MODULE(Weight); diff --git a/plugins/miniTTree.cc b/plugins/miniTTree.cc index 7a4fc6ee..5d1620ce 100644 --- a/plugins/miniTTree.cc +++ b/plugins/miniTTree.cc @@ -36,6 +36,20 @@ class miniTTree : public edm::EDAnalyzer edm::EDGetToken evinfoToken_; edm::EDGetToken jec_unc_src; + edm::EDGetToken jetResolution_src; + edm::EDGetToken JERsf_src; + edm::EDGetToken JERsf_up_src; + edm::EDGetToken JERsf_down_src; + edm::EDGetToken genJetPt_src; + edm::EDGetToken genJetMatch_src; + + edm::EDGetToken ele_scale_error_src; + edm::EDGetToken ele_smearing_sigma_src; + edm::EDGetToken ele_smearing_sigma_phi_up_src; + edm::EDGetToken ele_smearing_sigma_phi_down_src; + edm::EDGetToken ele_smearing_sigma_rho_up_src; + edm::EDGetToken ele_smearing_sigma_rho_down_src; + edm::EDGetToken muon_IDSF_central_src; edm::EDGetToken muon_IsoSF_central_src; edm::EDGetToken muon_IDSF_error_src; @@ -57,6 +71,18 @@ miniTTree::miniTTree(const edm::ParameterSet& cfg): primaryVertexToken_ ( consumes >(edm::InputTag("offlineSlimmedPrimaryVertices"))), evinfoToken_ ( consumes(edm::InputTag("generator"))), jec_unc_src ( consumes(cfg.getParameter("jec_unc_src"))), + jetResolution_src ( consumes >(cfg.getParameter("jetResolution_src"))), + JERsf_src ( consumes >(cfg.getParameter("JERsf_src"))), + JERsf_up_src ( consumes >(cfg.getParameter("JERsf_up_src"))), + JERsf_down_src ( consumes >(cfg.getParameter("JERsf_down_src"))), + genJetPt_src ( consumes >(cfg.getParameter("genJetPt_src"))), + genJetMatch_src ( consumes >(cfg.getParameter("genJetMatch_src"))), + ele_scale_error_src ( consumes >(cfg.getParameter("ele_scale_error_src"))), + ele_smearing_sigma_src ( consumes >(cfg.getParameter("ele_smearing_sigma_src"))), + ele_smearing_sigma_phi_up_src ( consumes >(cfg.getParameter("ele_smearing_sigma_phi_up_src"))), + ele_smearing_sigma_phi_down_src ( consumes >(cfg.getParameter("ele_smearing_sigma_phi_down_src"))), + ele_smearing_sigma_rho_up_src ( consumes >(cfg.getParameter("ele_smearing_sigma_rho_up_src"))), + ele_smearing_sigma_rho_down_src ( consumes >(cfg.getParameter("ele_smearing_sigma_rho_down_src"))), muon_IDSF_central_src ( consumes >(cfg.getParameter("muon_IDSF_central_src"))), muon_IsoSF_central_src ( consumes >(cfg.getParameter("muon_IsoSF_central_src"))), muon_IDSF_error_src ( consumes >(cfg.getParameter("muon_IDSF_error_src"))), @@ -86,6 +112,32 @@ void miniTTree::analyze(const edm::Event& event, const edm::EventSetup&) edm::Handle jec_unc; event.getByToken(jec_unc_src, jec_unc); + edm::Handle< edm::ValueMap > jetResolution; + event.getByToken(jetResolution_src, jetResolution); + edm::Handle< edm::ValueMap > JERsf; + event.getByToken(JERsf_src, JERsf); + edm::Handle< edm::ValueMap > JERsf_up; + event.getByToken(JERsf_up_src, JERsf_up); + edm::Handle< edm::ValueMap > JERsf_down; + event.getByToken(JERsf_down_src, JERsf_down); + edm::Handle< edm::ValueMap > genjetPt; + event.getByToken(genJetPt_src, genjetPt); + edm::Handle< edm::ValueMap > genjetMatch; + event.getByToken(genJetMatch_src, genjetMatch); + + edm::Handle< edm::ValueMap > ele_scale_error; + event.getByToken(ele_scale_error_src, ele_scale_error); + edm::Handle< edm::ValueMap > ele_smearing_sigma; + event.getByToken(ele_smearing_sigma_src, ele_smearing_sigma); + edm::Handle< edm::ValueMap > ele_smearing_sigma_phi_up; + event.getByToken(ele_smearing_sigma_phi_up_src, ele_smearing_sigma_phi_up); + edm::Handle< edm::ValueMap > ele_smearing_sigma_phi_down; + event.getByToken(ele_smearing_sigma_phi_up_src, ele_smearing_sigma_phi_down); + edm::Handle< edm::ValueMap > ele_smearing_sigma_rho_up; + event.getByToken(ele_smearing_sigma_rho_up_src, ele_smearing_sigma_rho_up); + edm::Handle< edm::ValueMap > ele_smearing_sigma_rho_down; + event.getByToken(ele_smearing_sigma_rho_up_src, ele_smearing_sigma_rho_down); + edm::Handle< edm::ValueMap > muon_IDSF; event.getByToken(muon_IDSF_central_src, muon_IDSF); @@ -96,8 +148,8 @@ void miniTTree::analyze(const edm::Event& event, const edm::EventSetup&) edm::Handle< edm::ValueMap > muon_IsoSF_error; event.getByToken(muon_IsoSF_error_src, muon_IsoSF_error); - edm::Handle evinfo; - edm::Handle > PU_Info; + edm::Handle evinfo; + edm::Handle > PU_Info; edm::Handle PU_Weights; edm::Handle > primary_vertex; @@ -113,28 +165,28 @@ void miniTTree::analyze(const edm::Event& event, const edm::EventSetup&) myEvent.nPV++; } - if(!event.isRealData()) { - event.getByToken(evinfoToken_, evinfo); - myEvent.weight = evinfo->weight(); - event.getByToken(pileUpInfoToken_, PU_Info); - for(auto p : *PU_Info) { - int BX = p.getBunchCrossing(); - if(BX == 0) - myEvent.nPU = p.getTrueNumInteractions(); - } - event.getByToken(pileUpReweightToken_, PU_Weights); - myEvent.PU_reweight = *PU_Weights; - + if(!event.isRealData()) { + event.getByToken(evinfoToken_, evinfo); + myEvent.weight = evinfo->weight(); + event.getByToken(pileUpInfoToken_, PU_Info); + for(auto p : *PU_Info) { + int BX = p.getBunchCrossing(); + if(BX == 0) + myEvent.nPU = p.getTrueNumInteractions(); + } } - for (size_t i = 0; i < electrons->size(); ++i) { const auto ele = electrons->ptrAt(i); TLorentzVector p4; p4.SetPtEtaPhiM(ele->pt(), ele->eta(), ele->phi(), ele->mass()); myEvent.electrons_p4->push_back(p4); - myEvent.electron_scale->push_back(1.0); - myEvent.electron_smearing->push_back(0.01); + myEvent.electron_scale_error->push_back((*ele_scale_error)[ele]); + myEvent.electron_smearing_sigma->push_back((*ele_smearing_sigma)[ele]); + myEvent.electron_smearing_sigma_phi_up->push_back((*ele_smearing_sigma_phi_up)[ele]); + myEvent.electron_smearing_sigma_phi_down->push_back((*ele_smearing_sigma_phi_down)[ele]); + myEvent.electron_smearing_sigma_rho_up->push_back((*ele_smearing_sigma_rho_up)[ele]); + myEvent.electron_smearing_sigma_rho_down->push_back((*ele_smearing_sigma_rho_down)[ele]); myEvent.electron_charge->push_back(ele->charge()); myEvent.electron_r9->push_back(ele->full5x5_r9()); } @@ -157,6 +209,12 @@ void miniTTree::analyze(const edm::Event& event, const edm::EventSetup&) p4.SetPtEtaPhiM(jet->pt(), jet->eta(), jet->phi(), jet->mass()); myEvent.jets_p4->push_back(p4); myEvent.jec_uncertainty->push_back((*jec_unc)[jet]); + myEvent.jetResolution->push_back((*jetResolution)[jet]); + myEvent.JER_sf->push_back((*JERsf)[jet]); + myEvent.JER_sf_up->push_back((*JERsf_up)[jet]); + myEvent.JER_sf_down->push_back((*JERsf_down)[jet]); + myEvent.genJetPt->push_back((*genjetPt)[jet]); + myEvent.genJetMatch->push_back((*genjetMatch)[jet]); } tree->Fill(); diff --git a/plugins/produceEleScaleSmearing.cc b/plugins/produceEleScaleSmearing.cc new file mode 100644 index 00000000..9d77cfac --- /dev/null +++ b/plugins/produceEleScaleSmearing.cc @@ -0,0 +1,151 @@ +#include "DataFormats/Common/interface/ValueMap.h" +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "DataFormats/VertexReco/interface/Vertex.h" + +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "JetMETCorrections/Modules/interface/JetResolution.h" + +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "DataFormats/PatCandidates/interface/Electron.h" +#include "EgammaAnalysis/ElectronTools/interface/ElectronEnergyCalibratorRun2.h" + +//#include "TLorentzVector.h" +#include +using namespace std; + +class produceEleScaleSmearing : public edm::EDProducer +{ + + + typedef float v_t; + typedef edm::ValueMap scale_factors_Map; + +public: + produceEleScaleSmearing(const edm::ParameterSet&); + virtual void produce(edm::Event&, const edm::EventSetup&); + +private: + edm::EDGetToken srcToken_; + std::string outputCollName1; ///