(("hlt1_excl_biased", "unbiased"), ("hlt2_biased", "not_biased"), ("hlt2_unbiased", "unbiased")): 0.027,
    (("hlt1_excl_biased", "unbiased"), ("hlt2_biased", "biased"), ("hlt2_unbiased", "unbiased")): 0.383,
    (("hlt1_excl_biased", "excl_biased"), ("hlt2_biased", "not_biased"), ("hlt2_unbiased", "unbiased")): 0.01,
    (("hlt1_excl_biased", "unbiased"), ("hlt2_biased", "biased"), ("hlt2_unbiased", "not_unbiased")): 0.433,
    (("hlt1_excl_biased", "excl_biased"), ("hlt2_biased", "biased"), ("hlt2_unbiased", "unbiased")): None,
}
rel_spec = dict(
    [
        (tuple((categories[c], l) for c, l in k), {"Constant": True, "Value": v} if v else None)
        for k, v in rel_spec.iteritems()
    ]
)

res_model = MultiHistEfficiencyModel(
    Name="RMHE",
    Original=sig_t.pdf(),
    Observable=t,
    ConditionalCategories=True,
    UseSingleBinConstraint=False,
    ResolutionModel=tres.model(),
    Bins=bin_spec,
    Relative=rel_spec,
)

pdf = Single_Exponent_Time(Name="pdf", time=t, resolutionModel=res_model)
pdf = pdf.pdf()

gen_observables = [t, hlt1_excl_biased, hlt2_unbiased, hlt2_biased]

## Get proto data
proto_data = None
Beispiel #2
0
tres = TimeResolution(Name = 'tres', **tres_args)

from P2VV.Parameterizations.TimePDFs import Single_Exponent_Time as TimePdf
sig_t = TimePdf(t, tres.model())

# B mass pdf
from P2VV.Parameterizations.MassPDFs import DoubleGauss_Signal_Mass as MassPdf
sig_m = MassPdf(m, Name = 'sig_m', AvSigParameterisation = True)
sig_m = sig_m.pdf()

# background
psi_c = RealVar( 'psi_c',  Unit = '1/MeV', Value = -0.0004, MinMax = (-0.1, -0.0000001))
bkg_m = Pdf(Name = 'bkg_m',  Type = Exponential, Parameters = [m, psi_c])

background = Component('background', (bkg_m,), Yield= (200000,500,5000000) )
signal = Component('signal', (sig_m, sig_t.pdf()), Yield= (200000,500,500000) )

from P2VV.Utilities.DataHandling import readData
tree_name = 'DecayTree'

## cut = 'runNumber > 0 && sel == 1 && (hlt1_biased == 1 || hlt1_unbiased_dec == 1) && hlt2_biased == 1 && '
cut = 'runNumber > 0 && sel == 1 && hlt1_unbiased_dec == 1 && hlt2_unbiased == 1 && '
cut += ' && '.join(['%s < 4' % e for e in ['muplus_track_chi2ndof', 'muminus_track_chi2ndof', 'Kplus_track_chi2ndof', 'Kminus_track_chi2ndof']])

from ROOT import RooAbsData
storage = RooAbsData.getDefaultStorageType()
RooAbsData.setDefaultStorageType(RooAbsData.Tree)

data = readData(input_data[args[0]]['data'], tree_name, ntupleCuts = cut,
                NTuple = True, observables = observables)
## hists = {hlt1_excl_biased_dec : {'excl_biased' : {'histogram' : 'hlt1_shape', 'average' : (6.285e-01, 1.633e-02)},
##                                  'unbiased' : { 'bins' : t.getRange(), 'heights' : [0.5]}}}
## hists = {hlt1_excl_biased_dec : {'exclB' : {'histogram' : 'hlt1_shape'},
##                                  'notExclB' : { 'bins' : t.getRange(), 'heights' : [0.7]}},
##          hlt2_biased : { 'B' : {'histogram' : 'hlt2_shape'}},
##          hlt2_unbiased : { 'UB' : {'histogram' : 'hlt2_shape'}}}
hists = {hlt1_excl_biased_dec : {'exclB' : {'histogram' : 'hlt1_shape'},
                                 'notExclB' : { 'bins' : t.getRange(), 'heights' : [0.7]}},
         hlt2_biased : { 'B' : {'histogram' : 'hlt2_shape'}},
         hlt2_unbiased : { 'UB' : {'bins' : t.getRange(), 'heights' : [0.7]}}}

from P2VV.Parameterizations.TimePDFs import Single_Exponent_Time
pdf_wrapper = Single_Exponent_Time(Name = 'pdf', time = t, resolutionModel = tres.model())
tau = pdf_wrapper._tau
pdf = pdf_wrapper.pdf()
split_cats = [[run_period]]
from itertools import chain
split_pars = [[tau]]
sim_pdf = SimultaneousPdf(pdf.GetName() + '_simul', MasterPdf = pdf,
                          SplitCategories = split_cats, SplitParameters = split_pars)


from ROOT import RooArgSet, RooArgList
split_cat_pars = RooArgSet()
sim_pdf.treeNodeServerList(split_cat_pars)
split_cat = sim_pdf.indexCat()
input_cats = RooArgList(split_cat) if split_cat.isFundamental() else split_cat.inputCatList()
prototype = tres.model()
from P2VV.RooFitWrappers import AddModel
## NOTE, this only works for either a single resolution model or an AddModel which does
if real_data:
    ## input_file = os.path.join(base_location, 'data/Bs2JpsiPhi_2011_biased_unbiased.root')
    input_file = os.path.join(base_location, 'data/Bs2JpsiPhi_ntupleB_for_fitting_20121012_MagDownMagUp.root')
    data = readData(input_file, tree_name, cuts = 'sel == 1 && (hlt1_biased == 1 || hlt1_unbiased_dec == 1) && (hlt2_biased == 1 || hlt2_unbiased == 1)',
                    NTuple = True, observables = observables)
    ## data = readData(input_file, tree_name, cuts = 'sel == 1 && hlt1_unbiased == 1 && (hlt2_biased == 1 || hlt2_unbiased == 1)',
    ##                 NTuple = True, observables = observables)
    total = data.sumEntries()

    rel_spec = {}
    for comb in valid:
        cuts = ' && '.join(['{0} == {0}::{1}'.format(state.GetName(), label) for state, label in comb])
        rel_spec[comb] = {'Value' : data.sumEntries(cuts) / total, "Constant" : True}

    spec['Relative'] = rel_spec
    res_model = MultiHistEfficiencyModel(Name = "RMHE", Original = sig_t.pdf(), Observable = t,
                                         ConditionalCategories = True, UseSingleBinConstraint = False,
                                         ResolutionModel = tres.model(), Spline = False,
                                         SmoothSpline = 1, **spec)
    pdf = Single_Exponent_Time(Name = 'pdf', time = t, resolutionModel = res_model)
    pdf = pdf.pdf()
    pdf.Print('v')

    for i in range(3):
        mass_result = mass_pdf.fitTo(data, **fitOpts)
        if mass_result.status() == 0:
            break
    assert(mass_result.status() == 0)
    # Plot mass pdf
    from ROOT import kDashed, kRed, kGreen, kBlue, kBlack
    from ROOT import TCanvas