Exemplo n.º 1
0
 def __init__(self, year, id='DeepTau2017v2p1VSjet', path=datapath):
     """Choose the IDs and WPs for SFs."""
     assert year in campaigns, "You must choose a year from %s." % (
         ', '.join(campaigns))
     file_lowpt = ensureTFile(
         os.path.join(datapath, "TauES_dm_%s_%s.root" % (id, year)))
     file_highpt = ensureTFile(
         os.path.join(datapath, "TauES_dm_%s_%s_ptgt100.root" % (id, year)))
     self.hist_lowpt = extractTH1(file_lowpt, 'tes')
     self.hist_highpt = extractTH1(file_highpt, 'tes')
     self.hist_lowpt.SetDirectory(0)
     self.hist_highpt.SetDirectory(0)
     self.pt_low = 34  # average pT in Z -> tautau measurement (incl. in DM)
     self.pt_high = 170  # average pT in W* -> taunu measurement (incl. in DM)
     self.DMs = [0, 1, 10] if "oldDM" in id else [0, 1, 10, 11]
     file_lowpt.Close()
     file_highpt.Close()
Exemplo n.º 2
0
 def __init__(self, year, id='DeepTau2017v2p1VSe', path=datapath):
     """Choose the IDs and WPs for SFs."""
     assert year in campaigns, "You must choose a year from %s." % (
         ', '.join(campaigns))
     file = ensureTFile(
         os.path.join(datapath, "TauFES_eta-dm_%s_%s.root" % (id, year)))
     graph = file.Get('fes')
     FESs = {'barrel': {}, 'endcap': {}}
     DMs = [0, 1]
     i = 0
     for region in ['barrel', 'endcap']:
         for dm in DMs:
             y = graph.GetY()[i]
             yup = graph.GetErrorYhigh(i)
             ylow = graph.GetErrorYlow(i)
             FESs[region][dm] = (y - ylow, y, y + yup)
             i += 1
     file.Close()
     self.FESs = FESs
     self.DMs = [0, 1]
     self.genmatches = [1, 3]
Exemplo n.º 3
0
    def __init__(self,
                 year,
                 id,
                 wp='Tight',
                 dm=False,
                 emb=False,
                 otherVSlepWP=False,
                 path=datapath,
                 verbose=False):
        """Choose the IDs and WPs for SFs. For available tau IDs and WPs, check
        https://cms-nanoaod-integration.web.cern.ch/integration/master-102X/mc102X_doc.html#Tau
        Options:
          dm:           use decay mode-dependent SFs
          emb:          use SFs for embedded samples
          otherVSlepWP: extra uncertainty if you are using a different DeepTauVSe/mu WP than used in the measurement
        """
        assert year in campaigns, "You must choose a year from %s." % (
            ', '.join(campaigns))
        self.ID = id
        self.WP = wp
        self.verbose = verbose
        self.extraUnc = None

        if id in ['MVAoldDM2017v2', 'DeepTau2017v2p1VSjet']:
            if dm:
                if emb:
                    if 'oldDM' in id:
                        raise IOError(
                            "Scale factors for embedded samples not available for ID '%s'!"
                            % id)
                    else:
                        file = ensureTFile(os.path.join(
                            path, "TauID_SF_dm_%s_%s_EMB.root" % (id, year)),
                                           verbose=verbose)
                else:
                    file = ensureTFile(os.path.join(
                        path, "TauID_SF_dm_%s_%s.root" % (id, year)),
                                       verbose=verbose)
                self.hist = extractTH1(file, wp)
                self.hist.SetDirectory(0)
                file.Close()
                self.DMs = [0, 1, 10] if 'oldDM' in id else [0, 1, 10, 11]
                self.getSFvsPT = self.disabled
                self.getSFvsEta = self.disabled
                if otherVSlepWP:
                    if emb:
                        self.extraUnc = 0.05
                    else:
                        self.extraUnc = 0.03
            else:
                if emb:
                    if 'oldDM' in id:
                        raise IOError(
                            "Scale factors for embedded samples not available for ID '%s'!"
                            % id)
                    else:
                        file = ensureTFile(os.path.join(
                            path, "TauID_SF_pt_%s_%s_EMB.root" % (id, year)),
                                           verbose=verbose)
                else:
                    file = ensureTFile(os.path.join(
                        path, "TauID_SF_pt_%s_%s.root" % (id, year)),
                                       verbose=verbose)
                self.func = {}
                self.func[None] = file.Get("%s_cent" % (wp))
                self.func['Up'] = file.Get("%s_up" % (wp))
                self.func['Down'] = file.Get("%s_down" % (wp))
                file.Close()
                self.getSFvsDM = self.disabled
                self.getSFvsEta = self.disabled
                if otherVSlepWP:
                    if emb:
                        self.extraUnc = lambda pt: (0.05 if pt < 100 else 0.15)
                    else:
                        self.extraUnc = lambda pt: (0.03 if pt < 100 else 0.15)
        elif id in [
                'antiMu3', 'antiEleMVA6', 'DeepTau2017v2p1VSmu',
                'DeepTau2017v2p1VSe'
        ]:
            if emb:
                raise IOError(
                    "Scale factors for embedded samples not available for ID '%s'!"
                    % id)
            else:
                file = ensureTFile(os.path.join(
                    path, "TauID_SF_eta_%s_%s.root" % (id, year)),
                                   verbose=verbose)
            self.hist = extractTH1(file, wp)
            self.hist.SetDirectory(0)
            file.Close()
            self.genmatches = [1, 3] if 'ele' in id.lower() else [2, 4]
            self.getSFvsPT = self.disabled
            self.getSFvsDM = self.disabled
        else:
            raise IOError("Did not recognize tau ID '%s'!" % id)