def test_simfit2 ( ) : # ========================================================================= signal1 = Models.Gauss_pdf ( 'G1' , xvar = mass1 , mean = (1.5 , 6.5 ) , sigma = (0.1 , 2.5 ) ) model1 = Models.Fit1D ( suffix = 'M1' , signal = signal1 , background = -1 ) model1.S = NS1 model1.B = NB1 mean2 = signal1.vars_add ( signal1.mean , 10.0 ) sigma2 = signal1.vars_multiply ( signal1.sigma , 0.5 ) signal2 = Models.Gauss_pdf ( 'G2' , xvar = mass2 , mean = mean2 , sigma = sigma2 ) model2 = Models.Fit1D ( suffix = 'M2' , signal = signal2 , background = -1 ) model2.S = NS2 model2.B = NB2 # ========================================================================= ## fit 1 r1 , f1 = model1.fitTo ( dataset1 , draw = True , nbins = 50 , silent = True ) ## fit 2 r2 , f2 = model2.fitTo ( dataset2 , draw = True , nbins = 50 , silent = True ) # ========================================================================= ## combine data sample = ROOT.RooCategory ('sample','sample' , 'A' , 'B' ) ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet ( mass1 , mass2 ) dataset = combined_data ( sample , vars , { 'A' : dataset1 , 'B' : dataset2 } ) ## combine PDFs model_sim = Models.SimFit ( sample , { 'A' : model1 , 'B' : model2 } , name = 'X' ) # ========================================================================= r , f = model_sim.fitTo ( dataset , silent = True ) r , f = model_sim.fitTo ( dataset , silent = True ) fA = model_sim.draw ( 'A' , dataset , nbins = 50 ) fB = model_sim.draw ( 'B' , dataset , nbins = 50 ) fNLL = model_sim.draw_nll ( 'SM2' , dataset , range = (0,1000) ) ## significance wilks = model_sim.wilks ( 'SM2' , dataset ) logger.info ( 'Fit results are: %s ' % r )
def test_simfit2(): logger = getLogger('test_simfit2') # ========================================================================= signal1 = Models.Gauss_pdf('G1', xvar=mass1, mean=(1.5, 6.5), sigma=(0.1, 2.5)) model1 = Models.Fit1D(suffix='M1', signal=signal1, background=-1) model1.S = NS1 model1.B = NB1 mean2 = signal1.vars_add(signal1.mean, 10.0) sigma2 = signal1.vars_multiply(signal1.sigma, 0.5) signal2 = Models.Gauss_pdf('G2', xvar=mass2, mean=mean2, sigma=sigma2) model2 = Models.Fit1D(suffix='M2', signal=signal2, background=-1) model2.S = NS2 model2.B = NB2 with use_canvas('test_simfit2'): # ========================================================================= ## fit 1 with wait(1): r1, f1 = model1.fitTo(dataset1, draw=True, nbins=50, silent=True) title = 'Results of fit to dataset1' logger.info('%s\n%s' % (title, r1.table(title=title, prefix='# '))) ## fit 2 with wait(1): r2, f2 = model2.fitTo(dataset2, draw=True, nbins=50, silent=True) title = 'Results of fit to dataset2' logger.info('%s\n%s' % (title, r2.table(title=title, prefix='# '))) # ========================================================================= ## combine data sample = ROOT.RooCategory('sample', 'sample', 'A', 'B') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass1, mass2) dataset = combined_data(sample, vars, {'A': dataset1, 'B': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'A': model1, 'B': model2}, name='X') # ========================================================================= r, f = model_sim.fitTo(dataset, silent=True) r, f = model_sim.fitTo(dataset, silent=True) title = 'Results of simultaneous fit' logger.info('%s\n%s' % (title, r.table(title=title, prefix='# '))) with use_canvas('test_simfit2'): with wait(1): fA = model_sim.draw('A', dataset, nbins=50) with wait(1): fB = model_sim.draw('B', dataset, nbins=50)
def test_simfit1(): logger = getLogger('test_simfit1') signal1 = Models.Gauss_pdf('G1', xvar=mass, mean=(0.5, 2.5), sigma=(0.1, 1.0)) model1 = Models.Fit1D(suffix='M1', signal=signal1, background=-1) model1.S = NS1 model1.B = NB1 mean2 = signal1.vars_add(signal1.mean, 1.0) sigma2 = signal1.vars_multiply(signal1.sigma, 0.5) signal2 = Models.Gauss_pdf('G2', xvar=mass, mean=mean2, sigma=sigma2) model2 = Models.Fit1D(suffix='M2', signal=signal2, background=model1.background) model2.S = NS2 model2.B = NB2 with use_canvas('test_simfit1'): # ========================================================================= ## fit 1 with wait(1): r1, f1 = model1.fitTo(dataset1, draw=True, nbins=50, silent=True) ## fit 2 with wait(1): r2, f2 = model2.fitTo(dataset2, draw=True, nbins=50, silent=True) # ========================================================================= ## combine data sample = ROOT.RooCategory('sample', 'sample', 'A', 'B') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass) dataset = combined_data(sample, vars, {'A': dataset1, 'B': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'A': model1, 'B': model2}, name='X') # ========================================================================= r, f = model_sim.fitTo(dataset, silent=True) r, f = model_sim.fitTo(dataset, silent=True) with use_canvas('test_simfit1'): with wait(1): fA = model_sim.draw('A', dataset, nbins=50) with wait(1): fB = model_sim.draw('B', dataset, nbins=50) logger.info('Fit results are: %s ' % r)
def test_simfit4(): # ========================================================================= VARS = MakeVar() ## MC/DATA ratio for signal widths Rs = ROOT.RooRealVar('Rs', 'MC/DATA ratio for signal widths', 1.0, 0.2, 3.0) ## sigma for normalization peak: sigma from MC multiplied by a factor sigma_N = VARS.vars_multiply(Rs, sigma1, name='sigma_N') ## sigma for signal peak: sigma from MC multiplied by the same factor sigma_S = VARS.vars_multiply(Rs, sigma2, name='sigma_S') ## Normalization peak: signal_N = Models.Gauss_pdf('GN', xvar=mass1, mean=(3, 8), sigma=sigma_N) ## mean of low-statistics signal is constrained to the mean of high statistic signal mean_S = VARS.vars_sum(signal_N.mean, mean2 - mean1) ## low statistic signal : signal_S = Models.Gauss_pdf('GS', xvar=mass2, mean=mean_S, sigma=sigma_S) # ========================================================================= ## model for fitting of normalization channel model_N = Models.Fit1D(suffix='N', signal=signal_N, background=-2) ## 2nd order positive polynomial model_N.S = NS1 model_N.B = NB1 ## model for fitting of low-statistic signal channel model_S = Models.Fit1D(suffix='S', signal=signal_S, background=-2) ## 2nd order positive polynomial model_S.S = NS2 model_S.B = NB2 # ========================================================================= ## make fit for thew normalization channel only # ========================================================================= rN, fN = model_N.fitTo(dataset1, draw=None, silent=True) rN, fN = model_N.fitTo(dataset1, draw=None, silent=True) rN, fN = model_N.fitTo(dataset1, draw=True, nbins=50, silent=True) logger.info('Fit results for normalization sample only: %s' % rN) # ========================================================================= ## make fit for the low-statistic signal channel only # ========================================================================= rS, fS = model_S.fitTo(dataset2, draw=None, silent=True) rS, fS = model_S.fitTo(dataset2, draw=None, silent=True) rS, fS = model_S.fitTo(dataset2, draw=True, nbins=50, silent=True) logger.info('Fit results for low-statistic signal only: %s' % rS) # ========================================================================= ## combine data for simultaneous fit # ========================================================================= sample = ROOT.RooCategory('sample', 'sample', 'S', 'N') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass1, mass2) dataset = combined_data(sample, vars, {'N': dataset1, 'S': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'S': model_S, 'N': model_N}, name='X') # ========================================================================= rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) fN = model_sim.draw('N', dataset, nbins=50) fS = model_sim.draw('S', dataset, nbins=50) logger.info('Combined fit results are: %s ' % rC) logger.info(' Value | Simple fit | Combined fit ') logger.info(' #N | %25s | %-25s ' % (rS.SS * 1, rC.SS * 1)) logger.info(' mean | %25s | %-25s ' % (rS.mean_GN * 1, rC.mean_GN * 1)) logger.info(' Rs | %25s | %-25s ' % (rS.Rs * 1, rC.Rs * 1))
def test_toys_simfit_1(): ## make simple test mass mass = ROOT.RooRealVar('test_mass', 'Some test mass', 0, 5) ## book very simple data set: varset1 = ROOT.RooArgSet(mass) dataset1 = ROOT.RooDataSet(dsID(), 'Test Data set-1', varset1) ## book very simple data set: varset2 = ROOT.RooArgSet(mass) dataset2 = ROOT.RooDataSet(dsID(), 'Test Data set-2', varset2) ## high statistic, low-background "control channel" mean1 = 2.0 sigma1 = 0.50 NS1 = 1000 NB1 = 250 for i in range(NS1): v1 = random.gauss(mean1, sigma1) if v1 in mass: mass.setVal(v1) dataset1.add(varset1) for i in range(NB1): v1 = random.uniform(0, 5) if v1 in mass: mass.setVal(v1) dataset1.add(varset1) ## low statistic, high-background "control channel" NS2 = 250 NB2 = 1000 mean2 = mean1 + 1.0 sigma2 = sigma1 * 0.5 for i in range(NS2): v2 = random.gauss(mean2, sigma2) if v2 in mass: mass.setVal(v2) dataset2.add(varset2) for i in range(NB2): v2 = random.uniform(0, 5) if v2 in mass: mass.setVal(v2) dataset2.add(varset2) signal1 = Models.Gauss_pdf('G1', xvar=mass, mean=(0.5, 2.5), sigma=(0.1, 1.0)) model1 = Models.Fit1D(suffix='M1', signal=signal1, background=-1) model1.S = NS1 model1.B = NB1 mean2 = signal1.vars_add(signal1.mean, 1.0) sigma2 = signal1.vars_multiply(signal1.sigma, 0.5) signal2 = Models.Gauss_pdf('G2', xvar=mass, mean=mean2, sigma=sigma2) model2 = Models.Fit1D(suffix='M2', signal=signal2, background=model1.background) model2.S = NS2 model2.B = NB2 # ========================================================================= ## fit 1 r1, f1 = model1.fitTo(dataset1, draw=True, nbins=50, silent=True) ## fit 2 r2, f2 = model2.fitTo(dataset2, draw=True, nbins=50, silent=True) # ========================================================================= ## combine data sample = ROOT.RooCategory('sample', 'sample', 'A', 'B') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass) dataset = combined_data(sample, vars, {'A': dataset1, 'B': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'A': model1, 'B': model2}, name='X') # ========================================================================= r, f = model_sim.fitTo(dataset, silent=True) r, f = model_sim.fitTo(dataset, silent=True) fA = model_sim.draw('A', dataset, nbins=50) fB = model_sim.draw('B', dataset, nbins=50) logger.info('Fit results are: %s ' % r.table(prefix="# ")) ## Make toys results, stats = Toys.make_toys(pdf=model_sim, nToys=100, data=[mass], gen_config={ 'nEvents': (NS1 + NB1, NS2 + NB2), 'sample': True }, fit_config={'silent': True}, init_pars={ 'mean_G1': mean1, 'BM1': NB1, 'BM2': NB2, 'sigma_G1': sigma1, 'SM1': NS1, 'SM2': NS2, 'phi0_Bkg_FitG1_M1': 0 }, silent=True, progress=True)
def test_simfit4(): logger = getLogger('test_simfit4') # ========================================================================= VARS = MakeVar() ## MC/DATA ratio for signal widths Rs = ROOT.RooRealVar('Rs', 'MC/DATA ratio for signal widths', 1.0, 0.2, 3.0) ## sigma for normalization peak: sigma from MC multiplied by a factor sigma_N = VARS.vars_multiply(Rs, sigma1, name='sigma_N') ## sigma for signal peak: sigma from MC multiplied by the same factor sigma_S = VARS.vars_multiply(Rs, sigma2, name='sigma_S') ## Normalization peak: signal_N = Models.Gauss_pdf('GN', xvar=mass1, mean=(3, 8), sigma=sigma_N) ## mean of low-statistics signal is constrained to the mean of high statistic signal mean_S = VARS.vars_sum(signal_N.mean, mean2 - mean1) ## low statistic signal : signal_S = Models.Gauss_pdf('GS', xvar=mass2, mean=mean_S, sigma=sigma_S) # ========================================================================= ## 3rd order positive polynomial bkg_N = Models.make_bkg(-3, 'Bkg_N', mass1) ## model for fitting of normalization channel model_N = Models.Fit1D(suffix='N', signal=signal_N, background=bkg_N) model_N.S = NS1 model_N.B = NB1 ## 3rd order positive polynomial bkg_S = Models.make_bkg(-3, 'Bkg_S', mass2) ## model for fitting of low-statistic signal channel model_S = Models.Fit1D(suffix='S', signal=signal_S, background=bkg_S) model_S.S = NS2 model_S.B = NB2 # ========================================================================= ## make fit for thew normalization channel only # ========================================================================= with use_canvas('test_simfit4'): rN, fN = model_N.fitTo(dataset1, draw=None, silent=True) rN, fN = model_N.fitTo(dataset1, draw=None, silent=True) rN, fN = model_N.fitTo(dataset1, draw=True, nbins=50, silent=True) title = 'Fit to high-statistic normalisation sample' logger.info('Fit results for normalization sample only: %s' % rN.table(title=title, prefix='# ')) # ========================================================================= ## make fit for the low-statistic signal channel only # ========================================================================= with use_canvas('test_simfit4'): rS, fS = model_S.fitTo(dataset2, draw=None, silent=True) rS, fS = model_S.fitTo(dataset2, draw=None, silent=True) rS, fS = model_S.fitTo(dataset2, draw=True, nbins=50, silent=True) title = 'Fit to low-statistics sample' logger.info('Fit results for low-statistic signal only:\n%s' % rS.table(title=title, prefix='# ')) # ========================================================================= ## combine data for simultaneous fit # ========================================================================= sample = ROOT.RooCategory('sample', 'sample', 'S', 'N') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass1, mass2) dataset = combined_data(sample, vars, {'N': dataset1, 'S': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'S': model_S, 'N': model_N}, name='X') # ========================================================================= rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) with use_canvas('test_simfit4'): with wait(1): fN = model_sim.draw('N', dataset, nbins=50) with wait(1): fS = model_sim.draw('S', dataset, nbins=50) title = 'Simultaneous fit' logger.info('Combined fit results are:\n%s ' % rC.table(title=title, prefix='#'))
## combine data sample = ROOT.RooCategory ('sample','sample' , 'A' , 'B' ) ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet ( mass ) dataset = combined_data ( sample , vars , { 'A' : dataset1 , 'B' : dataset2 } ) ## combine PDFs model_sim = Models.SimFit ( sample , { 'A' : model1 , 'B' : model2 } , name = 'X' ) # ============================================================================= r , f = model_sim.fitTo ( dataset , silent = True ) r , f = model_sim.fitTo ( dataset , silent = True ) fA = model_sim.draw ( 'A' , dataset , nbins = 50 ) fB = model_sim.draw ( 'B' , dataset , nbins = 50 ) logger.info ( 'Fit results are: %s ' % r ) # ============================================================================= ## The END # =============================================================================
def test_simfit3(): logger = getLogger('test_simfit3') ## low statistic, high-background "signal channel" signal2 = Models.Gauss_pdf('G2', xvar=mass2, mean=(15, 20), sigma=(0.1, 5.0)) signal3 = Models.Gauss_pdf('G3', xvar=mass3, mean=signal2.mean, sigma=signal2.sigma) model_S = Models.Fit2DSym(suffix='M2', yvar=mass3, signal_x=signal2, signal_y=signal3, bkg_1x=None, bkg_2x=None) model_S.BB = NB2 model_S.SS = NS2 model_S.SB = NC2 model_S.SB.setMin(-500) ## fit 2 rS, fx = model_S.fitTo(dataset2, draw=None, nbins=50, silent=True) rS, fx = model_S.fitTo(dataset2, draw=None, nbins=50, silent=True) title = 'Results of fit to signal sample only' logger.info('%s\n%s' % (title, rS.table(title=title, prefix='# '))) with use_canvas('test_simfit3'): with wait(1): rS, fx = model_S.fitTo(dataset2, draw='X', nbins=50, silent=True) with wait(1): rS, fy = model_S.fitTo(dataset2, draw='Y', nbins=50, silent=True) # ========================================================================= ## high statistic, low-background "control/normalization channel" mean_N = signal2.vars_subtract(signal2.mean, 10.0) sigma_N = signal2.vars_multiply(signal2.sigma, 0.5) signal_N = Models.Gauss_pdf('G1', xvar=mass1, mean=mean_N, sigma=sigma_N) model_N = Models.Fit1D(suffix='M1', signal=signal_N, background=-1) model_N.S = NS1 model_N.B = NB1 ## fit 1 rN, fN = model_N.fitTo(dataset1, draw=False, nbins=50, silent=True) with use_canvas('test_simfit3'), wait(1): rN, fN = model_N.fitTo(dataset1, draw=True, nbins=50, silent=True) title = 'Results of fit to normalization sample only' logger.info('%s\n%s' % (title, rN.table(title=title, prefix='# '))) # ========================================================================= ## combine data sample = ROOT.RooCategory('sample', 'sample', 'S', 'N') ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet(mass1, mass2, mass3) dataset = combined_data(sample, vars, {'N': dataset1, 'S': dataset2}) ## combine PDFs model_sim = Models.SimFit(sample, {'S': model_S, 'N': model_N}, name='X') # ========================================================================= rC, fC = model_sim.fitTo(dataset, silent=True) rC, fC = model_sim.fitTo(dataset, silent=True) title = 'Results of simultaneous fit' logger.info('%s\n%s' % (title, rC.table(title=title, prefix='# '))) with use_canvas('test_simfit3'), wait(1): with wait(1): fN = model_sim.draw('N', dataset, nbins=50) with wait(1): fSx = model_sim.draw('S/x', dataset, nbins=50) with wait(1): fSy = model_sim.draw('S/y', dataset, nbins=50) logger.info(' Value | Simple fit | Combined fit ') logger.info(' #N | %25s | %-25s ' % (rS.SSM2 * 1, rC.SSM2 * 1)) logger.info(' mean | %25s | %-25s ' % (rS.mean_G2 * 1, rC.mean_G2 * 1)) logger.info(' sigma | %25s | %-25s ' % (rS.sigma_G2 * 1, rC.sigma_G2 * 1))
# ============================================================================= ## combine data sample = ROOT.RooCategory ('sample','sample' , 'S' , 'N' ) ## combine datasets from ostap.fitting.simfit import combined_data vars = ROOT.RooArgSet ( mass1 , mass2 , mass3 ) dataset = combined_data ( sample , vars , { 'N' : dataset1 , 'S' : dataset2 } ) ## combine PDFs model_sim = Models.SimFit ( sample , { 'S' : model_S , 'N' : model_N } , name = 'X' ) # ============================================================================= rC , fC = model_sim.fitTo ( dataset , silent = True ) rC , fC = model_sim.fitTo ( dataset , silent = True ) fN = model_sim.draw ( 'N' , dataset , nbins = 50 ) fSx = model_sim.draw ( 'S/x' , dataset , nbins = 50 ) fSy = model_sim.draw ( 'S/y' , dataset , nbins = 50 ) logger.info ( 'Combined fit results are: %s ' % rC ) logger.info ( ' Value | Simple fit | Combined fit ' ) logger.info ( ' #N | %25s | %-25s ' % ( rS.SSM2 * 1 , rC.SSM2 * 1 ) ) logger.info ( ' mean | %25s | %-25s ' % ( rS.mean_G2 * 1 , rC.mean_G2 * 1 ) )
def test_simfit5(): logger = getLogger('test_simfit5') # ========================================================================= ## resoltuion for the left peak # ========================================================================= reso1 = Models.ResoGauss('RG1', xvar=dm1, sigma=(sigma1, sigma1 / 2, sigma1 * 2), mean=(0, -1, 1)) # fit DM1 dataset for resolution r1, f1 = reso1.fitTo(dset1, silent=True) r1, f1 = reso1.fitTo(dset1, silent=True, draw=True, nbins=100) # ========================================================================= ## resoltuion for the central peak # ========================================================================= reso2 = Models.ResoGauss('RG2', xvar=dm2, sigma=(sigma2, sigma2 / 2, sigma2 * 2), mean=(0, -1, 1)) # fit DM2 dataset for resolution r2, f2 = reso2.fitTo(dset2, silent=True) r2, f2 = reso2.fitTo(dset2, silent=True, draw=True, nbins=100) # ========================================================================= ## resoltuion for the right peak # ========================================================================= reso3 = Models.ResoGauss('RG3', xvar=dm3, sigma=(sigma3, sigma3 / 2, sigma3 * 2), mean=(0, -1, 1)) # fit DM2 dataset for resolution r3, f3 = reso3.fitTo(dset3, silent=True) r3, f3 = reso3.fitTo(dset3, silent=True, draw=True, nbins=100) # ========================================================================= # model for data fit # ========================================================================= signal1 = Models.Gauss_pdf('G1', xvar=mass, sigma=reso1.sigma, mean=(mean1, mean1 - 1, mean1 + 1)) signal2 = Models.Gauss_pdf('G2', xvar=mass, sigma=reso2.sigma, mean=(mean2, mean2 - 1, mean2 + 1)) signal3 = Models.Gauss_pdf('G3', xvar=mass, sigma=reso3.sigma, mean=(mean3, mean3 - 1, mean3 + 1)) background = Models.PolyPos_pdf('Bkg', xvar=mass, power=1) model = Models.Fit1D(signals=[signal1, signal2, signal3], background=background) model.S = NS1, NS2, NS3 model.B = NB # ========================================================================= ## Fit data (without resolution samples) # ========================================================================= r0, f0 = model.fitTo(dataset, silent=True) r0, f0 = model.fitTo(dataset, silent=True, draw=True, nbins=100) logger.info('Fit result (only data):\n%s' % r0.table(prefix="# ")) ## combine PDFs model_sim = Models.SimFit(category, { 'data': model, 'dm1': reso1, 'dm2': reso2, 'dm3': reso3 }, name='X') # ========================================================================= ## Simultanegous fit data with resolution samples) # ========================================================================= r_1, f_1 = model_sim.fitTo(cdataset1, silent=True) r_1, f_1 = model_sim.fitTo(cdataset1, silent=True) logger.info('Simultaneous fit result (unbinned reso):\n%s' % r_1.table(prefix="# ")) with use_canvas('test_simfit5'), wait(1): with wait(1): fdm1 = model_sim.draw('dm1', cdataset1, nbins=100) with wait(1): fdm2 = model_sim.draw('dm2', cdataset1, nbins=100) with wait(1): fdm3 = model_sim.draw('dm3', cdataset1, nbins=100) with wait(1): fd = model_sim.draw('data', cdataset1, nbins=100) # ========================================================================= ## Simultanegous fit data with resolution samples) # ========================================================================= r_2, f_2 = model_sim.fitTo(cdataset2, silent=True, sumw2=True) r_2, f_2 = model_sim.fitTo(cdataset2, silent=True, sumw2=True) logger.info('Simultaneous fit result (binned reso):\n%s' % r_2.table(prefix="# ")) with use_canvas('test_simfit5'), wait(1): with wait(1): fdm1 = model_sim.draw('dm1', cdataset2, nbins=100) with wait(1): fdm2 = model_sim.draw('dm2', cdataset2, nbins=100) with wait(1): fdm3 = model_sim.draw('dm3', cdataset2, nbins=100) with wait(1): fd = model_sim.draw('data', cdataset2, nbins=100)
# =============================================================================== ## 3a: Construction for simultaneous fit # =============================================================================== ## combine data sample = ROOT.RooCategory('sample', 'sample', 'DATA', 'MC') ## combine datasets vars = ROOT.RooArgSet(mass, dm) dataset = combined_data(sample, vars, {'DATA': ds_DATA, 'MC': ds_MC}) ## combine PDFs model_sim = Models.SimFit(sample, { 'DATA': model_DATA, 'MC': model_MC }, name='X') ## fit it! rSIM, fSIM = model_sim.fitTo(dataset, silent=True) rSIM, fSIM = model_sim.fitTo(dataset, silent=True) title = 'Simultaneous fit(1) to DATA&MC' logger.info('%s\n%s' % (title, rSIM.table(title=title, prefix='# '))) phi_DATA.m0.release() reso_MC.sigma.release() ## fit it! rSIM, fSIM = model_sim.fitTo(dataset, silent=True) rSIM, fSIM = model_sim.fitTo(dataset, silent=True)