def run(self, **kwargs): from ROOT import RooArgSet __check_req_kw__("Observables", kwargs) __check_req_kw__("Pdf", kwargs) __check_req_kw__("Sigmat", kwargs) __check_req_kw__("Time", kwargs) __check_req_kw__("SigmaGen", kwargs) sigma_gen = kwargs.pop("SigmaGen") observables = kwargs.pop("Observables") obs_set = RooArgSet(*observables) pdf = kwargs.pop("Pdf") sigmat = kwargs.pop("Sigmat") time = kwargs.pop("Time") gen_obs_set = RooArgSet(*observables) # Make another ArgSet to put the fit results in result_params = RooArgSet("result_params") from P2VV.RooFitWrappers import RealVar da = RealVar("da", Observable=True, MinMax=(0.01, 1.1)) dft = RealVar("dft", Observable=True, MinMax=(0.01, 1.1)) result_params.add(da._target_()) result_params.add(dft._target_()) transform = self.transform() if transform: trans_params = transform.gen_params(gen_obs_set) self._gen_params.extend(trans_params) for p in trans_params: result_params.add(p) # Some extra numbers of interest from ROOT import RooRealVar seed = RooRealVar("seed", "random seed", 0.0) result_params.add(seed) # The dataset to store the results from ROOT import RooDataSet self._data = RooDataSet("result_data", "result_data", result_params) data_params = self._data.get() from ROOT import RooRandom import struct, os # Reset pdf parameters to initial values. Note: this does not reset the estimated errors... args = dict(NumEvents=self.options().nevents) if "ProtoData" in kwargs: args["ProtoData"] = kwargs.pop("ProtoData") spec = pdf.prepareMultiGen(obs_set, **args) while self._data.numEntries() < self.options().ntoys: # Get a good random seed, set it and store it s = struct.unpack("I", os.urandom(4))[0] RooRandom.randomGenerator().SetSeed(s) seed.setVal(s) data = pdf.generate(spec) if self.transform(): old_data = data data = self.transform()(old_data) if not data: transform.set_params(data_params) self._data.add(data_params) continue from P2VV import Dilution d_ft = Dilution.dilution_ft(data, time, t_range=2, quiet=True) d_a = Dilution.signal_dilution_dg(data, sigmat, *sigma_gen) da.setVal(d_a[0]) da.setError(d_a[1] if d_a[1] != None else 0.0) dft.setVal(d_ft[0]) dft.setError(d_ft[1] if d_ft[1] != None else 0.0) if transform: transform.set_params(data_params) self._data.add(result_params) return self.data()
mumuMassCanvLog.SetTopMargin(0.05) mumuMassCanvLog.SetLogy(True) mumuMassPlot.Draw() if labelText : label.DrawLatexNDC( 0.25, 0.85, labelText ) mumuMassCanvLog.Print( mumuPlotsFilePath + ')' ) ########################################################################################################################################### ## Make KK mass plots ## ######################## #Build KK mas pdf from ROOT import RooRealVar, RooRelBreitWigner, RooConstVar, RooFFTConvPdf, RooGaussModel #Mass Resolution Model KKMassVar = KKMass._target_() resMean = RooRealVar( 'resMean' , 'resMean' , 0.62, -5., 5. ) resSigma = RooRealVar( 'resSigma' , 'resSigma' , 1.21, 0.01, 5. ) resMean.setError(0.02) resSigma.setError(0.04) GaussModel = RooGaussModel( 'GaussModel', 'GaussModel', KKMassVar, resMean, resSigma ) #Build Phi Mass Pdf mean = RooConstVar( 'mean' , 'mean' , 1019.455 ) width = RooConstVar( 'width' , 'width' , 4.26 ) spin = RooConstVar( 'spin' , 'spin' , 1. ) radius = RooConstVar( 'radius', 'radius', -1. ) K1mass = RooConstVar( 'K1mass', 'K1mass', 493.68 ) K2mass = RooConstVar( 'K2mass', 'K2mass', 493.68 )