if options.signal is None:
  signalEstimators = []
  isFastSim = False
elif options.signal == "DM":
  signalEstimators = [ MCBasedEstimate(name=s.name,    sample={channel:s for channel in allChannels}, cacheDir=setup.defaultCacheDir() ) for s in signals_TTDM ]
  isFastSim = False
elif options.signal == "T2tt":
  signalEstimators = [ MCBasedEstimate(name=s.name,    sample={channel:s for channel in allChannels}, cacheDir=setup.defaultCacheDir() ) for s in [T2tt_450_0] ]
  isFastSim = True
elif options.signal == "allT2tt":
  signalEstimators = [ MCBasedEstimate(name=s.name,    sample={channel:s for channel in allChannels}, cacheDir=setup.defaultCacheDir() ) for s in signals_T2tt ]
  isFastSim = True
else:
  raise Exception("Unknown signal estimator choice")

signalSetup = setup.sysClone(parameters={'useTriggers':False})

def wrapper(args):
        r,channel,setup = args
        res = estimate.cachedEstimate(r, channel, setup, save=True)
        return (estimate.uniqueKey(r, channel, setup), res )


for isSignal, estimators_ in [ [ True, signalEstimators ], [ False, allEstimators ] ]:
    for estimate in estimators_:
        setup_ = signalSetup if isSignal else setup
        if options.skipIfCachefileExists and estimate.cache.cacheFileLoaded:
            print "Cache file %s was loaded -> Skipping."%estimate.cache.filename
            continue
        jobs=[]
        for channel in ['MuMu' ,'EE', 'EMu']:
argParser.add_argument("--regions",        action='store', default='defaultRegions', nargs='?', choices=["defaultRegions","reducedRegionsA","reducedRegionsB","reducedRegionsAB","reducedRegionsNew"], help="which regions setup?")
argParser.add_argument("--signal",         action='store', default='T2tt',           nargs='?', choices=["T2tt","DM"],                                                                                 help="which signal to plot?")
argParser.add_argument("--estimateDY",     action='store', default='DY',             nargs='?', choices=["DY","DY-DD"],                                                                                help="which DY estimate?")
argParser.add_argument("--estimateTTZ",    action='store', default='TTZ',            nargs='?', choices=["TTZ","TTZ-DD","TTZ-DD-Top16009"],                                                            help="which DY estimate?")
args = argParser.parse_args()


if   args.regions == "defaultRegions":    regions = defaultRegions
elif args.regions == "reducedRegionsA":   regions = reducedRegionsA
elif args.regions == "reducedRegionsB":   regions = reducedRegionsB
elif args.regions == "reducedRegionsAB":  regions = reducedRegionsAB
elif args.regions == "reducedRegionsNew": regions = reducedRegionsNew
else: raise Exception("Unknown regions setup")

detailedEstimators = constructEstimatorList(['TTJets','other-detailed', args.estimateDY, args.estimateTTZ])
signalSetup = setup.sysClone(parameters={'useTriggers':False})

for estimator in detailedEstimators:
    estimator.style = styles.fillStyle( getattr( color, estimator.name.split('-')[0] ) )

from StopsDilepton.samples.cmgTuples_FastSimT2tt_mAODv2_25ns_postProcessed    import *
from StopsDilepton.samples.cmgTuples_FullSimTTbarDM_mAODv2_25ns_postProcessed import *
signalEstimators = [ MCBasedEstimate(name=s.name,  sample={channel:s for channel in allChannels}, cacheDir=setup.defaultCacheDir() ) for s in ([T2tt_450_0] if args.signal == "T2TT" else [TTbarDMJets_scalar_Mchi1_Mphi100])]
for estimator in signalEstimators:
    estimator.style = styles.lineStyle( getattr(color, estimator.name ), width=2 )
 
estimators = detailedEstimators + signalEstimators
for e in estimators:
    e.initCache(setup.defaultCacheDir())

示例#3
0
def wrapper(s):
    c = cardFileWriter.cardFileWriter()
    c.releaseLocation = combineReleaseLocation

    cardFileName = os.path.join(limitDir, s.name + '.txt')
    if not os.path.exists(cardFileName) or overWrite:
        counter = 0
        c.reset()
        c.addUncertainty('PU', 'lnN')
        c.addUncertainty('topPt', 'lnN')
        c.addUncertainty('JEC', 'lnN')
        c.addUncertainty('JER', 'lnN')
        c.addUncertainty('SFb', 'lnN')
        c.addUncertainty('SFl', 'lnN')
        if fastSim:
            c.addUncertainty('SFFS', 'lnN')
            c.addUncertainty('leptonSF', 'lnN')

        eSignal = MCBasedEstimate(
            name=s.name,
            sample={channel: s
                    for channel in allChannels},
            cacheDir=setup.defaultCacheDir())
        for r in regions[1:]:
            for channel in ['MuMu', 'EE', 'EMu']:  # for channel in ['all']:
                niceName = ' '.join([channel, r.__str__()])
                binname = 'Bin' + str(counter)
                counter += 1
                total_exp_bkg = 0
                c.addBin(binname, [e.name for e in estimators], niceName)
                for e in estimators:
                    expected = e.cachedEstimate(r, channel, setup)
                    total_exp_bkg += expected.val
                    c.specifyExpectation(binname, e.name, expected.val)

                    if expected.val > 0:
                        c.specifyUncertainty(
                            'PU', binname, e.name,
                            1 + e.PUSystematic(r, channel, setup).val)
                        c.specifyUncertainty(
                            'JEC', binname, e.name,
                            1 + e.JECSystematic(r, channel, setup).val)
                        c.specifyUncertainty(
                            'JER', binname, e.name,
                            1 + e.JERSystematic(r, channel, setup).val)
                        c.specifyUncertainty(
                            'topPt', binname, e.name,
                            1 + e.topPtSystematic(r, channel, setup).val)
                        c.specifyUncertainty(
                            'SFb', binname, e.name,
                            1 + e.btaggingSFbSystematic(r, channel, setup).val)
                        c.specifyUncertainty(
                            'SFl', binname, e.name,
                            1 + e.btaggingSFlSystematic(r, channel, setup).val)

                        #MC bkg stat (some condition to neglect the smaller ones?)
                        uname = 'Stat_' + binname + '_' + e.name
                        c.addUncertainty(uname, 'lnN')
                        c.specifyUncertainty('Stat_' + binname + '_' + e.name,
                                             binname, e.name,
                                             1 + expected.sigma / expected.val)

                c.specifyObservation(binname, int(total_exp_bkg))

                #signal
                e = eSignal
                if fastSim:
                    signalSetup = setup.sysClone(
                        sys={'reweight': ['reweightLeptonFastSimSF']},
                        parameters={'useTriggers': False})
                else:
                    signalSetup = setup.sysClone(
                        parameters={'useTriggers': False})
                signal = e.cachedEstimate(r, channel, signalSetup)

                c.specifyExpectation(binname, 'signal', signal.val)

                if signal.val > 0:
                    c.specifyUncertainty(
                        'PU', binname, 'signal',
                        1 + e.PUSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty(
                        'JEC', binname, 'signal',
                        1 + e.JECSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty(
                        'JER', binname, 'signal',
                        1 + e.JERSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty(
                        'SFb', binname, 'signal', 1 +
                        e.btaggingSFbSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty(
                        'SFl', binname, 'signal', 1 +
                        e.btaggingSFlSystematic(r, channel, signalSetup).val)
                    if fastSim:
                        c.specifyUncertainty(
                            'leptonSF', binname, 'signal', 1 +
                            e.leptonFSSystematic(r, channel, signalSetup).val)
                        c.specifyUncertainty(
                            'SFFS', binname, 'signal',
                            1 + e.btaggingSFFSSystematic(
                                r, channel, signalSetup).val)

                    #signal MC stat added in quadrature with PDF uncertainty: 10% uncorrelated
                    uname = 'Stat_' + binname + '_signal'
                    c.addUncertainty(uname, 'lnN')
                    c.specifyUncertainty(
                        uname, binname, 'signal',
                        1 + sqrt(0.1**2 + signal.sigma / signal.val))

                if signal.val <= 0.01 and total_exp_bkg <= 0.01 or total_exp_bkg <= 0:  # or (total_exp_bkg>300 and signal.val<0.05):
                    if verbose:
                        print "Muting bin %s. Total sig: %f, total bkg: %f" % (
                            binname, signal.val, total_exp_bkg)
                    c.muted[binname] = True
                else:
                    if verbose:
                        print "NOT Muting bin %s. Total sig: %f, total bkg: %f" % (
                            binname, signal.val, total_exp_bkg)

        c.addUncertainty('Lumi', 'lnN')
        c.specifyFlatUncertainty('Lumi', 1.046)
        cardFileName = c.writeToFile(cardFileName)
    else:
        print "File %s found. Reusing." % cardFileName

    if args.signal == "DM": sConfig = s.mChi, s.mPhi, s.type
    elif args.signal == "T2tt": sConfig = s.mStop, s.mNeu

    if useCache and not overWrite and limitCache.contains(s):
        res = limitCache.get(sConfig)
    else:
        res = c.calcLimit(cardFileName)
        limitCache.add(sConfig, res, save=True)

    try:
        if res:
            if args.signal == "DM":
                sString = "mChi %i mPhi %i type %i" % sConfig
            elif args.signal == "T2tt":
                sString = "mStop %i mNeu %i" % sConfig
            print "Result: %i obs %5.3f exp %5.3f -1sigma %5.3f +1sigma %5.3f" % (
                sString, res['-1.000'], res['0.500'], res['0.160'],
                res['0.840'])
    except:
        print "Something wrong with the limit: %r" % res
    return sConfig, res
示例#4
0
def wrapper(s):
    c = cardFileWriter.cardFileWriter()
    c.releaseLocation = combineReleaseLocation

    cardFileName = os.path.join(limitDir, s.name + ".txt")
    if not os.path.exists(cardFileName) or overWrite:
        counter = 0
        c.reset()
        c.addUncertainty("PU", "lnN")
        c.addUncertainty("topPt", "lnN")
        c.addUncertainty("JEC", "lnN")
        c.addUncertainty("JER", "lnN")
        c.addUncertainty("SFb", "lnN")
        c.addUncertainty("SFl", "lnN")
        if fastSim:
            c.addUncertainty("SFFS", "lnN")
            c.addUncertainty("leptonSF", "lnN")

        eSignal = MCBasedEstimate(
            name=s.name, sample={channel: s for channel in allChannels}, cacheDir=setup.defaultCacheDir()
        )
        for r in regions[1:]:
            for channel in ["MuMu", "EE", "EMu"]:  # for channel in ['all']:
                niceName = " ".join([channel, r.__str__()])
                binname = "Bin" + str(counter)
                counter += 1
                total_exp_bkg = 0
                c.addBin(binname, [e.name for e in estimators], niceName)
                for e in estimators:
                    expected = e.cachedEstimate(r, channel, setup)
                    total_exp_bkg += expected.val
                    c.specifyExpectation(binname, e.name, expected.val)

                    if expected.val > 0:
                        c.specifyUncertainty("PU", binname, e.name, 1 + e.PUSystematic(r, channel, setup).val)
                        c.specifyUncertainty("JEC", binname, e.name, 1 + e.JECSystematic(r, channel, setup).val)
                        c.specifyUncertainty("JER", binname, e.name, 1 + e.JERSystematic(r, channel, setup).val)
                        c.specifyUncertainty("topPt", binname, e.name, 1 + e.topPtSystematic(r, channel, setup).val)
                        c.specifyUncertainty("SFb", binname, e.name, 1 + e.btaggingSFbSystematic(r, channel, setup).val)
                        c.specifyUncertainty("SFl", binname, e.name, 1 + e.btaggingSFlSystematic(r, channel, setup).val)

                        # MC bkg stat (some condition to neglect the smaller ones?)
                        uname = "Stat_" + binname + "_" + e.name
                        c.addUncertainty(uname, "lnN")
                        c.specifyUncertainty(
                            "Stat_" + binname + "_" + e.name, binname, e.name, 1 + expected.sigma / expected.val
                        )

                c.specifyObservation(binname, int(total_exp_bkg))

                # signal
                e = eSignal
                if fastSim:
                    signalSetup = setup.sysClone(
                        sys={"reweight": ["reweightLeptonFastSimSF"]}, parameters={"useTriggers": False}
                    )
                else:
                    signalSetup = setup.sysClone(parameters={"useTriggers": False})
                signal = e.cachedEstimate(r, channel, signalSetup)

                c.specifyExpectation(binname, "signal", signal.val)

                if signal.val > 0:
                    c.specifyUncertainty("PU", binname, "signal", 1 + e.PUSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty("JEC", binname, "signal", 1 + e.JECSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty("JER", binname, "signal", 1 + e.JERSystematic(r, channel, signalSetup).val)
                    c.specifyUncertainty(
                        "SFb", binname, "signal", 1 + e.btaggingSFbSystematic(r, channel, signalSetup).val
                    )
                    c.specifyUncertainty(
                        "SFl", binname, "signal", 1 + e.btaggingSFlSystematic(r, channel, signalSetup).val
                    )
                    if fastSim:
                        c.specifyUncertainty(
                            "leptonSF", binname, "signal", 1 + e.leptonFSSystematic(r, channel, signalSetup).val
                        )
                        c.specifyUncertainty(
                            "SFFS", binname, "signal", 1 + e.btaggingSFFSSystematic(r, channel, signalSetup).val
                        )

                    # signal MC stat added in quadrature with PDF uncertainty: 10% uncorrelated
                    uname = "Stat_" + binname + "_signal"
                    c.addUncertainty(uname, "lnN")
                    c.specifyUncertainty(uname, binname, "signal", 1 + sqrt(0.1 ** 2 + signal.sigma / signal.val))

                if (
                    signal.val <= 0.01 and total_exp_bkg <= 0.01 or total_exp_bkg <= 0
                ):  # or (total_exp_bkg>300 and signal.val<0.05):
                    if verbose:
                        print "Muting bin %s. Total sig: %f, total bkg: %f" % (binname, signal.val, total_exp_bkg)
                    c.muted[binname] = True
                else:
                    if verbose:
                        print "NOT Muting bin %s. Total sig: %f, total bkg: %f" % (binname, signal.val, total_exp_bkg)

        c.addUncertainty("Lumi", "lnN")
        c.specifyFlatUncertainty("Lumi", 1.046)
        cardFileName = c.writeToFile(cardFileName)
    else:
        print "File %s found. Reusing." % cardFileName

    if args.signal == "DM":
        sConfig = s.mChi, s.mPhi, s.type
    elif args.signal == "T2tt":
        sConfig = s.mStop, s.mNeu

    if useCache and not overWrite and limitCache.contains(s):
        res = limitCache.get(sConfig)
    else:
        res = c.calcLimit(cardFileName)
        limitCache.add(sConfig, res, save=True)

    try:
        if res:
            if args.signal == "DM":
                sString = "mChi %i mPhi %i type %i" % sConfig
            elif args.signal == "T2tt":
                sString = "mStop %i mNeu %i" % sConfig
            print "Result: %i obs %5.3f exp %5.3f -1sigma %5.3f +1sigma %5.3f" % (
                sString,
                res["-1.000"],
                res["0.500"],
                res["0.160"],
                res["0.840"],
            )
    except:
        print "Something wrong with the limit: %r" % res
    return sConfig, res