コード例 #1
0
    def buildComponentIntegrals(self, region, vals, errs, integrals):
        fracMap = self.getComponentFractions(
            self.workspace.pdf('bg_{}'.format(region)))
        if isinstance(integrals, dict):
            vals = vals[region]['']
            errs = errs[region]['']
            integrals = integrals[region]
        allerrors = {}
        allintegrals = {}
        for component in fracMap:
            #self.workspace.factory('{}_{}_norm[1,0,2]'.format(component,region))
            subint = 1.
            suberr2 = 0.
            # TODO: errors are way larger than they should be, need to look into this
            # dont use these uncertainties
            for frac in fracMap.get(component, []):
                key = frac.GetTitle()
                if isinstance(frac, ROOT.RooRecursiveFraction):
                    subint *= frac.getVal()
                    #TODO correct this
                    #suberr2 += (frac.getError()/frac.getVal())**2
                else:
                    subint *= frac.getVal()
                    suberr2 += (frac.getError() / frac.getVal())**2
            suberr = suberr2**0.5
            allerrors[component] = suberr

            name = 'integral_{}_{}'.format(component, region)
            if isinstance(integrals, dict):
                paramValue = subint * integrals['']
                paramShifts = {}
                for shift in self.BACKGROUNDSHIFTS:
                    shiftValueUp = subint * integrals[shift + 'Up']
                    shiftValueDown = subint * integrals[shift + 'Down']
                    paramShifts[shift] = {
                        'up': shiftValueUp,
                        'down': shiftValueDown
                    }
                param = Models.Param(
                    name,
                    value=paramValue,
                    shifts=paramShifts,
                )
            else:
                paramValue = subint * integrals
                param = Models.Param(
                    name,
                    value=paramValue,
                )
            param.build(self.workspace, name)
            allintegrals[component] = paramValue

        return allintegrals, allerrors
コード例 #2
0
    def addControlModels(self,
                         addUpsilon=True,
                         setUpsilonLambda=False,
                         voigtian=False,
                         logy=False):
        region = 'control'
        self.buildModel(region=region,
                        addUpsilon=addUpsilon,
                        setUpsilonLambda=setUpsilonLambda,
                        voigtian=voigtian)
        #self.workspace.factory('bg_{}_norm[1,0,2]'.format(region))
        vals, errs, ints = self.fitBackground(
            region=region,
            setUpsilonLambda=setUpsilonLambda,
            addUpsilon=addUpsilon,
            logy=logy)

        # integral
        name = 'integral_bg_{}'.format(region)
        paramValue = ints
        param = Models.Param(
            name,
            value=paramValue,
        )
        param.build(self.workspace, name)

        allintegrals, errors = self.buildComponentIntegrals(
            region, vals, errs, ints)

        for k, v in allintegrals.items():
            print k, v
        self.control_vals = vals
        self.control_errs = errs
        self.control_integrals = ints
        self.control_integralErrors = errors
        self.control_integralValues = allintegrals
コード例 #3
0
    def addBackgroundModels(self,
                            fixAfterControl=False,
                            fixAfterFP=False,
                            addUpsilon=True,
                            setUpsilonLambda=False,
                            voigtian=False,
                            logy=False):
        if fixAfterControl:
            self.fix()
        if setUpsilonLambda:
            self.workspace.arg('lambda_cont1_FP').setConstant(True)
            self.workspace.arg('lambda_cont1_PP').setConstant(True)
        vals = {}
        errs = {}
        integrals = {}
        errors = {}
        allintegrals = {}
        for region in self.REGIONS:
            vals[region] = {}
            errs[region] = {}
            integrals[region] = {}
            if region == 'PP' and fixAfterFP and addUpsilon and self.XRANGE[
                    0] <= 9 and self.XRANGE[1] >= 11:
                self.fix()
            self.buildModel(region=region,
                            addUpsilon=addUpsilon,
                            setUpsilonLambda=setUpsilonLambda,
                            voigtian=voigtian)
            #self.workspace.factory('bg_{}_norm[1,0,2]'.format(region))
            for shift in self.BACKGROUNDSHIFTS + ['']:
                if shift == '':
                    v, e, i = self.fitBackground(
                        region=region,
                        setUpsilonLambda=setUpsilonLambda,
                        addUpsilon=addUpsilon,
                        logy=logy)
                    vals[region][shift] = v
                    errs[region][shift] = e
                    integrals[region][shift] = i
                    print "\n\n\nVALS, ERRS, INTEGRALS", shift, region,
                    print "VALS:", v, "\nERRS:", e, "\nINTEGRALS:", i
                else:
                    vUp, eUp, iUp = self.fitBackground(
                        region=region,
                        shift=shift + 'Up',
                        setUpsilonLambda=setUpsilonLambda,
                        addUpsilon=addUpsilon,
                        logy=logy)
                    vDown, eDown, iDown = self.fitBackground(
                        region=region,
                        shift=shift + 'Down',
                        setUpsilonLambda=setUpsilonLambda,
                        addUpsilon=addUpsilon,
                        logy=logy)
                    vals[region][shift + 'Up'] = vUp
                    errs[region][shift + 'Up'] = eUp
                    integrals[region][shift + 'Up'] = iUp
                    vals[region][shift + 'Down'] = vDown
                    errs[region][shift + 'Down'] = eDown
                    integrals[region][shift + 'Down'] = iDown
            if region == 'PP' and fixAfterFP and addUpsilon and self.XRANGE[
                    0] <= 9 and self.XRANGE[1] >= 11:
                self.fix(False)

            # integral
            name = 'integral_bg_{}'.format(region)
            paramValue = integrals[region]['']
            paramShifts = {}
            for shift in self.BACKGROUNDSHIFTS:
                shiftValueUp = integrals[region][shift + 'Up']
                shiftValueDown = integrals[region][shift + 'Down']
                paramShifts[shift] = {
                    'up': shiftValueUp,
                    'down': shiftValueDown
                }
            param = Models.Param(
                name,
                value=paramValue,
                shifts=paramShifts,
            )
            param.build(self.workspace, name)

            allintegrals[region], errors[
                region] = self.buildComponentIntegrals(region, vals, errs,
                                                       integrals)
            print "ALL INTEGRALS:", allintegrals[region], "\nERRORS:", errors[
                region]
            for k, v in allintegrals[region].items():
                print k, v

        if fixAfterControl:
            self.fix(False)
        self.background_values = vals
        self.background_errors = errs
        self.background_integrals = integrals
        self.background_integralErrors = errors
        self.background_integralValues = allintegrals