from Samples.SampleDefinition import Sample

#
from Samples.Uncertainties.UserUncertainties.TTbarContamination import TTbarContaminationUncertainty

from Samples.EventDefinition.UserEventDictionaries.MuTauEventDictionary import MuTauEventDictionary

TTContamination = Sample()
TTContamination.name = 'TTContamination'
TTContamination.path = '/data/aloeliger/SMHTT_Selected_2018_TTContamination/'
TTContamination.files = [
    'TTTo2L2Nu.root', 'TTToHadronic.root', 'TTToSemiLeptonic.root'
]
TTContamination.definition = ''
TTContamination.uncertainties = [TTbarContaminationUncertainty()]
TTContamination.eventDictionaryInstance = MuTauEventDictionary
TTContamination.CreateEventWeight = TTContamination.CreateEventWeight_Standard
TTContamination.startEntry = 24000
TTContamination.endEntry = 48000
from Samples.Uncertainties.UserUncertainties.TES import TESUncertainty
from Samples.Uncertainties.UserUncertainties.Signal_JES_18 import JES18Uncertainty
from Samples.Uncertainties.UserUncertainties.JER import JERUncertainty
from Samples.Uncertainties.UserUncertainties.ggHTheory_Differential_J1PT_Normalized import ggHTheory_Differential_J1PT_Normalized_Uncertainty
from Samples.Uncertainties.UserUncertainties.MetRecoil import MetRecoilUncertainty
from Samples.Uncertainties.UserUncertainties.MuonES import MuonESUncertainty
from Samples.Uncertainties.UserUncertainties.TauID import TauIDUncertainty
from Samples.Uncertainties.UserUncertainties.Trigger17_18 import Trigger1718Uncertainty
from Samples.Uncertainties.UserUncertainties.QCDAcceptanceUncertainties.DifferentialUncertainties.J1PT_QCD_Uncertainties.ggH_J1PT_Differential_QCDScale_Uncertainty import ggH_J1PT_Differential_QCDScale_Uncertainty

from Samples.EventDefinition.UserEventDictionaries.MuTauEventDictionary import MuTauEventDictionary

ggHSample = Sample()
ggHSample.name = 'ggH_recoJ1PT_GT350'
ggHSample.path = '/data/aloeliger/SMHTT_Selected_2018_Deep/'
ggHSample.files = ['ggH.root']
ggHSample.definition = 'is_Fiducial == 1.0 && jpt_1 >= 350.0'
ggHSample.uncertainties = [
    TESUncertainty(),
    JES18Uncertainty(),
    JERUncertainty(),
    ggHTheory_Differential_J1PT_Normalized_Uncertainty(),
    MetRecoilUncertainty(),
    MuonESUncertainty(),
    TauIDUncertainty(),
    Trigger1718Uncertainty(),
    ggH_J1PT_Differential_QCDScale_Uncertainty(),
]
ggHSample.eventDictionaryInstance = MuTauEventDictionary
ggHSample.CreateEventWeight = ggHSample.CreateEventWeight_Standard
    TTContaminationHistogram = theOutputHistograms[
        analysisCategory.name]["TTContamination_CMS_htt_emb_ttbar"]
    EmbeddedHistogram_Up = EmbeddedHistogram.Clone()
    EmbeddedHistogram_Up.SetNameTitle("embedded_CMS_htt_emb_ttbarUp",
                                      "embedded_CMS_htt_emb_ttbarUp")
    EmbeddedHistogram_Up.Add(TTContaminationHistogram, 0.1)
    EmbeddedHistogram_Down = EmbeddedHistogram.Clone()
    EmbeddedHistogram_Down.SetNameTitle("embedded_CMS_htt_emb_ttbarDown",
                                        "embedded_CMS_htt_emb_ttbarDown")
    EmbeddedHistogram_Down.Add(TTContaminationHistogram, -0.1)
    theOutputHistograms[analysisCategory.name][
        "embedded_CMS_htt_emb_ttbarUp"] = EmbeddedHistogram_Up
    theOutputHistograms[analysisCategory.name][
        "embedded_CMS_htt_emb_ttbarDown"] = EmbeddedHistogram_Down


EmbeddedSample = Sample()
EmbeddedSample.name = 'embedded'
EmbeddedSample.path = '/data/aloeliger/SMHTT_Selected_2017_Deep/'
EmbeddedSample.files = ['Embedded.root']
EmbeddedSample.definition = ''
EmbeddedSample.uncertainties = [
    EmbeddedTESUncertainty(),
    TTbarContaminationUncertainty()
]
EmbeddedSample.eventDictionaryInstance = MuTauEventDictionary
EmbeddedSample.CreateEventWeight = EmbeddedSample.CreateEventWeight_Standard
EmbeddedSample.EndAction = PerformTTbarContaminationSubtraction
EmbeddedSample.startEntry = 2500000
EmbeddedSample.endEntry = 3000000