(("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
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