Vous êtes sur la page 1sur 30

1 SteveStroiney CLEO101,Day8FittingwithRooFit

FittingwithRooFit
SteveStroiney
CLEO101Day8
June16,2006
2 SteveStroiney CLEO101,Day8FittingwithRooFit
WhyDoWeWanttoFit?

Wecanseefromplotsofand,forexample,thatCLEOproduces's,
someofwithdecayto.

Butwealsowanttoanswerquantitativequestions.

Howmany'swereobserved?

Whatisthewidth(resolution)oftheandpeaks?
AE
AE m
BC
m
BC
D
0
K

n
+
n
0
D
0
-K

n
+
n
0
AE
m
BC
D
0
3 SteveStroiney CLEO101,Day8FittingwithRooFit
FittingTerminology

Ourexperimentmeasuresanumberofobservablessuchasand.

Wewanttodetermineoneormoreparametersfromthedata,suchasthe
numberofsignalandbackgroundevents,orthewidthofapeak.

Wedescribethedistributionofourobservablesbyaprobabilitydensityfunction
(PDF)whichisafunctionofboththeobservablesandtheparameters.Wechoosethe
PDFbasedonsomeguessaboutwhatfunctionwouldmatchthedata.

ThePDFisnormalizedovertheobservables:

istheprobabilitythatforagivenevent,theobservableswillbeinthe
range.

WevarytheparameterstomakethePDFmatchtheactualdistributionoftheobservables
aswellaspossible.Thisiscalledfitting.

dx
1
... dx
n
f ( x
1
... x
n
; p
1
... p
m
)=1
AE
m
BC
f ( x , p) dx
1
... dx
n
dx
1
... dx
n
typicallyoneobservable
inafit(1Dfit)
p
i
x
i
4 SteveStroiney CLEO101,Day8FittingwithRooFit
UnbinnedMaximumLikelihoodFits

You'reprobablyfamiliarwithaleastsquaresfit:

Bindataintoahistogram,minimize

Forahistogram,and(Poissonstatisticsineachbin)

InRooFit,we'lluseafancier(andbetter)techniqueforfittinganunbinnedmaximum
likelihoodfit.

Likelihood

Varytheparameterstomaximizethelikelihood.Equivalently,minimize

Aleastsquaresfitmimicsamaximumlikelihoodfitifthebinsarenarrowandallbinshave
manyevents.

Amaximumlikelihoodfitisbetter(especiallyforsmalldatasets),butittakeslonger.
X
2
=

i
( y
i
y
expected
)
2
c
i
2
y
i
=N
i
c
i
=
.
N
i
L( p
1
, ... p
m
)=

events i
f ( x
1, i
, ... x
n , i
; p
1
, ... p
m
)
log| L( p
1
, ... p
m
)=

events i
log| f ( x
1, i
, ... x
n , i
; p
1
, ... p
m
)
5 SteveStroiney CLEO101,Day8FittingwithRooFit
WhatisRooFit?

ROOTisacollectionofC++classes.

ROOTcandofitting,butitisn'tveryconvenient.

RooFitprovidesmoreclassesdesignedtomakefittingeasier.

WeaccessRooFitthroughROOT,andwecanuseanyROOTobjectswhileusingRooFit.

AllRooFitclassnamesbeginwithRoo.

RooFithandlesmanyofthedetailsforyou,suchasnormalization.

AsofROOTversion5,RooFitisincludedaspartofROOT.However,CLEOusesversion4,
sowewillhavetoloadRooFitourselves.(Wewilluseversion1.92.)
6 SteveStroiney CLEO101,Day8FittingwithRooFit
StepstoDoaFit

LoadRooFitintoROOT.

LoadeventsintoaRooDataSet.

Makecuts.

DefinePDF(s).

Dothefit.

Makeaplot.
7 SteveStroiney CLEO101,Day8FittingwithRooFit
NtuplesUsedinThisTalk

I'llbeusingntuplescreatedbyRooFitExampleProc(availableat
www.lepp.cornell.edu/~srs63/private/cleo101_2006_day08/src/RooFitExampleProc)

Thisprocessorcomesfrommkprocdtag,modifiedtocreateanntuplewithafew
piecesofinformationforeachDTagcandidate.

Ifyoudon'twanttobothercreatingthentuplesyourself,youcangetthemat
www.lepp.cornell.edu/~srs63/private/cleo101_2006_day08/ntuple/.

Inthistalk,I'llshowexamplecodefromfittingthedistributionwithalinear
backgroundandaGaussiansignalpeak.

ThecodeoutputsinfoforDTagsinthe
followingdecaymodes:

200

201
AE
D
0
-K

n
+
n
0
D
0
-K

n
+
D
+
-K

n
+
n
+
D
+
-K

n
+
n
+
n
0
8 SteveStroiney CLEO101,Day8FittingwithRooFit
LoadingRooFitIntoROOT

Createafilecalledrootlogon.CinthedirectoryfromwhichyouwillrunROOT:

Ingeneral,rootlogon.CisjustasetofcommandstoberuneverytimeROOTstarts.

Youcancopythefileat
www.lepp.cornell.edu/~srs63/private/cleo101_2006_day08/fits/rootlogon.C

ThisfileloadsacopyofRooFitfrom
/nfs/cor/user/srs63/RooFit/V010902_in_20060224_FULL_2/
ThisdirectoryincludesinstructionsonhowtocompileRooFitonyouown,ifyouever
wantto.

YoumaygeterrorsifyouloadRooFitinadifferentROOTversion.
{
gROOT>SetStyle("Plain");//removegraybackgroundfromplots
gSystem>Load("libMinuit.so");
gSystem>Load("/path/to/this/file/libRooFitCore.so");
gSystem>Load("/path/to/this/file/libRooFitModels.so");
usingnamespaceRooFit;
}
notnecessary,andappliestoROOTgenerally
9 SteveStroiney CLEO101,Day8FittingwithRooFit
GettingaRooDataSet

WeneedtocreateaRooDataSetobjecttoholdtheeventswewanttofitandplot.

ARooDataSetcanbecreatedintwodifferentwaysfromatextfileorfroma
ROOTtree.I'llcoverthesecondway.

Seethefileheaders/GetRooDataSet.contheDay8webpagefora
convenientfunctiontocreateaRooDataSetfrommultiplefiles.

Unfortunately,appendingcanbeslowifthedatasetsarelarge.
//Createvariablestoloadfromthentuple.
RooRealVarDmode("Dmode","decaymodeofDcandidate",1,1000);
RooRealVarDdeltaE("DdeltaE","deltaEofDcandidate",0.1,0.1,"GeV");
RooArgSetntupleVarSet(Dmode,DdeltaE);
TFile*file1=newTFile("data33.root");
TTree*tree1=file1>Get("RooFitExampleProc/nt1");
RooDataSetdataSet("ntuple_of_D_candidates","ntupleofDcandidates",tree1,
ntupleVarSet);
TFile*file2=newTFile("data31.root");
TTree*tree2=file2>Get("RooFitExampleProc/nt1");
RooDataSettempDataSet("temp","temporarydataset",tree2,ntupleVarSet);
dataSet.append(tempDataSet);
onlyloadeventsinthisrange
namematchesnameinROOTtree
10 SteveStroiney CLEO101,Day8FittingwithRooFit
MakingCuts

Wecanmakecutsonourdata:

Inordertocutonacertainvariable,itmustbeintheRooDataSet.That'swhywe
loadedDmodeintothedataset,butnottheothervariables.
TCutDmodeCut=Dmode==0;//OnlyacceptDTagsindecaymode0(D0>Kpi+)
RooDataSet*ReducedDataSet=(RooDataSet*)dataSet.reduce(DmodeCut);
11 SteveStroiney CLEO101,Day8FittingwithRooFit
UnderstandingRooRealVar

AllobservablesandparameterswillbeoftypeRooRealVar.

Example:Variableconstrainedtobebetween1and1:

myVar_nameisRooFit'sinternalidentifierstringformyVar.

Theunitsargumentisoptional.

ThisformistypicallyusedforRooRealVarsthatholdobservables.

Variablefixedto0.5:

Variablefloatingbetween1and1,withinitialvalue0.5:

Thisformistypicallyusedforfitparameters.
RooRealVarmyVar(myVar_name,descriptionofmyVar,1,1,unitsofmyVar);
RooRealVarmyFixedVar(myFixedVar_name,descriptionofmyFixedVar,0.5,
unitsofmyVar);
RooRealVarmyFloatingVar(myFloatingVar_name,descriptionofmyFloatingVar,
0.5,1,1,unitsofmyVar);
12 SteveStroiney CLEO101,Day8FittingwithRooFit
DefiningaPDF:RooGaussian

We'lluseaGaussianforthesignalpeak:
f ( x)=
1
.
2nc
exp

1
2
(
xj
c
)
2

//Defineshapeparameters
RooRealVarpeak_gaussian_mean("peak_gaussian_mean","meanofgaussianforsignal
peak",0,0.1,0.1,"GeV");
RooRealVarpeak_gaussian_sigma("peak_gaussian_sigma","widthofgaussianforsignal
peak",0.01,0.0,0.05,"GeV");
//DefineGaussianPDF
RooGaussianpeak_gaussian("peak_gaussian","gaussianforsignalpeak",DdeltaE,
peak_gaussian_mean,peak_gaussian_sigma);
//Defineyieldparameter
RooRealVarpeak_yield("peak_yield","yieldofsignalpeak",1000,0,1000000);
initialguess,lowerbound,upperbound
13 SteveStroiney CLEO101,Day8FittingwithRooFit
DefiningaPDF:RooPolynomial

We'llusealinearfunctionforthebackground.

Tocreatealinearfunction,weusethemoregeneralPDFRooPolynomial.For
instance,foracubicpolynomial:

Forfittingthebackgroundof,alinearfunction:

Incidentally,here'saconstant(flat)function:
//Defineshapeparameter
RooRealVarbkgd_poly_c1("bkgd_poly_c1","slopeofbackground",0,10,10,"GeV^
1");
//DefinelinearPDF
RooPolynomialbkgd_poly("bkgd_poly","linearfunctionforbackground",DdeltaE,
RooArgList(bkgd_poly_c1));
//Defineshapeparameters
RooRealVarpoly_c1(poly_c1,coefficientofx^1term,0,10,10);
RooRealVarpoly_c2(poly_c2,coefficientofx^2term,0,10,10);
RooRealVarpoly_c3(poly_c3,coefficientofx^3term,0,10,10);
//DefinecubicpolynomialPDF
RooPolynomialpoly(poly,cubicpolynomial,x,RooArgList(poly_c1,poly_c2,
poly_c3));
f ( x)=1+c
1
x+c
2
x
2
+c
3
x
3
RooPolynomialconstant("constant","flatfunction",x,RooArgList());
(noshapeparameters)
AE
f ( x)=1+c
1
x
f ( x)=1
14 SteveStroiney CLEO101,Day8FittingwithRooFit
CreatingtheTotalPDF

Now,weneedtoaddtogetheroursignalandbackgroundPDFstocreatethetotalPDF
thatwe'llfittothedistribution:
//Signalpeak
RooRealVarpeak_gaussian_mean("peak_gaussian_mean","meanofgaussianforsignal
peak",0,0.1,0.1,"GeV");
RooRealVarpeak_gaussian_sigma("peak_gaussian_sigma","widthofgaussianforsignal
peak",0.01,0.0,0.05,"GeV");
RooGaussianpeak_gaussian("peak_gaussian","gaussianforsignalpeak",DdeltaE,
peak_gaussian_mean,peak_gaussian_sigma);
RooRealVarpeak_yield("peak_yield","yieldsignalpeak",1000,0,1000000);
//Background
RooRealVarbkgd_poly_c1("bkgd_poly_c1","slopeofbackground",0,10,10,"GeV^
1");
RooPolynomialbkgd_poly("bkgd_poly","linearfunctionforbackground",DdeltaE,
RooArgList(bkgd_poly_c1));
RooRealVarbkgd_yield("bkgd_yield","yieldofbackground",100,0,1000000);
//TotalPDF
RooArgListshapes;
RooArgListyields;
shapes.add(bkgd_poly);yields.add(bkgd_yield);
shapes.add(peak_gaussian);yields.add(peak_yield);
RooAddPdftotalPdf("totalPdf","sumofsignalandbackgroundPDF's",shapes,
yields);
AE
ARooArgListisanorderedlistofRooFitobjects.
15 SteveStroiney CLEO101,Day8FittingwithRooFit
DoingtheFit

Now,todothefit,wejustuse:

Extended()tellsRooFittodoanextendedlikelihoodfit.

Insteadoffixingthenormalizationtothenumberofeventsinthehistogram(whichisthe
default),anextendedlikelihoodfitincludestheoverallyieldasaparameter.

Weneedthistypeoffitifwearefittingfortheyieldsofeverycomponent.

Theuncertaintiesintheyieldsreportedbythefitwillincludethestatistical()
uncertainty.

Ifweweren'tfittingfortheyields,wewouldn'tneedthisoption.

Otheroptionsareavailabletocontrolandspeedupthefit.Theyarelistedinthe
RooFituser'sguideontheRooFitwebpage,orat
http://sourceforge.net/project/shownotes.php?release_id=308954(searchforfitTo)
totalPdf.fitTo(*ReducedDataSet,Extended());
.
N
16 SteveStroiney CLEO101,Day8FittingwithRooFit
MoreonFitting

RooFitusesMINUIT,astandardpackage,todothefit.

YouwillseeMINUIToutputonthescreen.Attheend,itshouldlooklikethis:

Ifthefitisunsuccessfuloriftheerrormatrixisnotaccurate,youwillhavetotweak
yourfitfunctionsand/orinitialguessesfortheparameters,andthenredothefit.

IfyouincludeSave()asanargumenttofitTo(),youwillgeta
RooFitResultobjectcontainingmoreinformation,suchasthecovariance(aka
error)matrix(whichissometimesveryimportant!).
FCN=62473.3FROMMINOSSTATUS=SUCCESSFUL301CALLS492TOTAL
EDM=0.000104002STRATEGY=1ERRORMATRIXACCURATE
EXTPARAMETERPARABOLICMINOSERRORS
NO.NAMEVALUEERRORNEGATIVEPOSITIVE
1bkgd_poly_c13.69964e+004.41224e014.37798e014.44728e01
2bkgd_yield1.51699e+034.46900e+014.42032e+014.51886e+01
3peak_gaussian_mean4.38537e041.15903e041.16119e041.15696e04
4peak_gaussian_sigma7.00617e031.00148e041.00171e041.00124e04
5peak_yield4.50372e+037.05955e+017.00657e+017.11417e+01
ERRDEF=0.5
17 SteveStroiney CLEO101,Day8FittingwithRooFit
PlottingtheResult

OK,we'vedonethefit,andnowwe'rereadytolookattheresult!
//CreateRooPlotobjectwithDdeltaEontheaxis.
RooPlot*DdeltaEFrame=DdeltaE.frame(Bins(50),Name("deltaE"),Title("deltaEofD
candidates"));
//PlothistogramofDdeltaE.
ReducedDataSet>plotOn(DdeltaEFrame,MarkerSize(0.9));
//Displayfitparameters.
totalPdf.paramOn(DdeltaEFrame,Format("NELU",AutoPrecision(2)),Layout(0.1,0.4,
0.9));
//Plotjustthebackground.
totalPdf.plotOn(DdeltaEFrame,Components(bkgd_poly),LineColor(kGreen));
//PlottotalPDF.
totalPdf.plotOn(DdeltaEFrame,LineColor(kRed));//plotfitpdf
//TheplotisnotonthescreenyetwehaveonlycreatedaRooPlotobject.
//Puttheplotonthescreen.
TCanvas*DdeltaEcanvas=newTCanvas("DdeltaEcanvas","FitofdeltaE");//make
newcanvas
DdeltaEFrame>Draw();//Putourplotonthecanvas.
18 SteveStroiney CLEO101,Day8FittingwithRooFit
ALookattheResult

Here'swhatweseeonthescreen.Thegreenlineisthebackground,andtheredlineis
thesumofthebackgroundandsignalPDF's.

Noticethepeakandsignalyields.Theuncertaintiesarelargerthan.

Thefitlooksgood,
exceptaround0.02.
Thisexcessisdueto
initialstateradiation
(whentheinitial
stateradiatesaphoton
beforeforming).
.
N
c

c
D
0
-K

n
+
(mode0)
data31&data33
19 SteveStroiney CLEO101,Day8FittingwithRooFit
AdditionalTopics

OK,nowwe'veseenthebasicsofhowtodoafitwithRooFit.

Let'slookatafewmorethingsthatwillbeuseful:

Morefittingfunctions

RooCBShape

RooArgusBG

RooGenericPdf

RooAddPdf(anotherform)

RooFormulaVar

Doingintegrals
20 SteveStroiney CLEO101,Day8FittingwithRooFit
FittingFunctions:RooCBShape

Whatdowedowhenwehavea
peakthatlooksmostlylikea
Gaussian,butwithatailononeside?

UseaCrystalBallshape.

Gaussianwithpowerlawtail.
RooCBShapeCBall(CBall,CrystalBallshape,x,mean,sigma,alpha,n);
f ( x)xj
n
f ( x)=
1
.
2nc
exp

1
2
(
xj
c
)
2

xco
Foratailontheright
side,useanegative
alpha.
switchhere
21 SteveStroiney CLEO101,Day8FittingwithRooFit
FittingFunctions:RooArgusBG

Whatfunctioncanweuseforthe
combinatoricbackgroundin?

UseanArgusshape.

Cutoff()atthebeamenergy.
RooArgusBGArgus(Argus,Argusshape,x,m0,c);
m
BC
m
0
c
m
0
(typicallyfixed,
notfloating)
22 SteveStroiney CLEO101,Day8FittingwithRooFit
FittingFunctions:RooGenericPdf

IfyouwanttouseafunctionthatRooFitdoesn'tprovide,youcanusea
RooGenericPdf.Forexample:

Equivalently,

@0referstothefirstelementof
theRooArgList,@1referstothe
second,@2tothethird,etc.

NoticethatRooFithandles
thenormalization.

Here'swhatitlookslike:
RooRealVarcutOffVar("cutOff","",0.0182);
RooGenericPdfnonNegLine("nonNegLine","","(@0>@1)*(@0@1)",
RooArgList(xVar,cutOffVar));
RooRealVarcutOffVar("cutOff","",0.0182);
RooGenericPdfnonNegLine("nonNegLine","","(xVar>cutOff)*(xVarcutOff)",
RooArgList(xVar,cutOffVar));
23 SteveStroiney CLEO101,Day8FittingwithRooFit
RooAddPdfExplainedMore

WealreadysawhowtouseRooAddPdftogetthesumoftwoPDF's.Infact,we
canaddanynumberofPDF'sinthisway:

Here,func[13]areanythreePDF's,andyield[13]arethenumberof
eventsineachofthem.

AnotherwaytouseRooAddPdfistospecifyasumofnfunctionswithn1
parametersforthefractionofthetotalfoundineachfunction:

Here,frac1isthefractionofeventsinsum2thatarefoundinfunc1,and
frac2isthefractioninfunc2.Thereisnofrac3sinceit'sequalto1
frac1frac2.

WecanthenspecifyayieldforsumWithFracs,justlikeanynormalPDF.
RooAddPdfsumWithYields(sumWithYields,,RooArgList(func1,func2,func3),
RooArgList(yield1,yield2,yield3));
RooAddPdfsumWithFracs(sumWithFracs,,RooArgList(func1,func2,func3),
RooArgList(frac1,frac2));
24 SteveStroiney CLEO101,Day8FittingwithRooFit
RooFormulaVar

Ifyouwanttodefineonefitparameterintermsofotherfitparameters,usea
RooFormulaVar.

Forexample,

var2canbeusedanywhereaRooRealVarcanbeused.Butthenthefitwilluse
var1andvar2OverVar1asthefitparameters.

Thiscanalsobeusefulifyouwanttomaketwovariablesfloattogether.For
instance,wecouldmakevar2OverVar1beconstant.
RooRealVarvar1(var1,,2,1,3);
RooRealVarvar2OverVar1(var2OverVar1,,2,0,999);
RooFormulaVarvar2(var2,,var2OverVar1*Var1,RooArgList(var2OverVar1,var1));
or@0*@1,likeinRooGenericPdf
25 SteveStroiney CLEO101,Day8FittingwithRooFit
TwoGaussiansExample

Forexample,supposewewanttocreateafunctionwhichisthesumoftwoGaussians
withthesamemeanbutdifferentwidths:

Ifyouwantedto,youcouldmaketheratioofwidthsfixedbysetting
width2OverWidth1tobeconstantinsteadoffloating:
RooRealVarmean(mean,,0,3,3);
RooRealVarwidth1(width1,,2,1,3);
RooRealVarwidth2OverWidth1(width2OverWidth1,,2,0,999);
RooFormulaVarwidth2(width2,,@0*@1,RooArgList(width2OverWidth1,width1));
RooRealVarfrac1(frac1,fractionofeventsingauss1,0.5,0,1);
RooGaussiangauss1(gauss1,firstGaussian,xVar,mean,width1);
RooGaussiangauss2(gauss2,secondGaussian,xVar,mean,width2);
RooAddPdftwoGaussians(twoGaussians,sumoftwoGaussians,
RooArgList(gauss1,gauss2),RooArgList(frac1));
RooRealVarwidth2OverWidth1(width2OverWidth1,,2);
26 SteveStroiney CLEO101,Day8FittingwithRooFit
DoingIntegrals

Thefitgivesustheyieldofeachcomponentofthehistogram,butwhatifwewantto
knowtheyieldinacertainrangeofthehistogram?

WecanfindoutthefractionofaPDFwithinacertainregionwiththefollowingfunction,
availableattheDay8pageatheaders/NormalizedIntegral.c

SeefitDeltaE.ccattheDay9pageforhowtocallthisfunction.
doubleNormalizedIntegral(RooAbsPdf*function,RooRealVar&integrationVar,
doublelowerLimit,doubleupperLimit)
{
integrationVar.setRange("integralRange",lowerLimit,upperLimit);
RooAbsReal*integral=(*function).createIntegral(integrationVar,
NormSet(integrationVar),Range("integralRange"));
doublenormalizedIntegralValue=integral>getVal();
printf("\nIntegrating%sfrom%fto%f\n",(*function).GetName(),
lowerLimit,upperLimit);
printf("Integralvalue:%f\n",normalizedIntegralValue);
returnnormalizedIntegralValue;
}
27 SteveStroiney CLEO101,Day8FittingwithRooFit
AdvancedTopics

HerearesomeadvancedthingsyoucandowithRooFitthataren'tcoveredinthistalk:

Plotonalogscale.(Seefits/fitDeltaE.ccontheDay8webpage.)

OutputRooRealVarstoatextfile,andloadthemfromatextfile.

Writeyourownfitfunction.(Forinstance,anerrorfunctiontheintegralofaGaussian
calledRooErf.)

Dotwodimensionalfits.

Useblindparameters.

Loaddatafromatextfile.(Inshort,use
RooDataSet::read(fileName,variable)
wherefileNameisafilewithonenumberperline,andvariableisa
RooRealVar.)
28 SteveStroiney CLEO101,Day8FittingwithRooFit
AdditionalResources

RooFitwebpage

http://roofit.sourceforge.net

Thispagecontainsauser'smanualandsome(old)tutorialslides.Also,youcanlookupall
theRooFitclassesandfunctions.

ROOTwebpage(sinceyou'realsousingROOTclasses)

http://root.cern.ch/

Some(maybe)usefulutilitiesI'vewrittenintheheadersareaoftheday8webpage
www.lepp.cornell.edu/~srs63/private/cleo101_2006_day08/fits/headers/

Me,orotherRooFitusers
29 SteveStroiney CLEO101,Day8FittingwithRooFit
ThingstoTry

Ifyouwantto,runRooFitExampleProcoveradatasetortwo.Itgeneratesanntuplewithverybasic
informationaboutDTagsin4decaymodes.Ifyouprefer,youcanusethentuplesontheday8web
page(soyoudon'thavetobotherwithprocessorsorsuezatall!).

RunthefunctioninfitDeltaE.cc(availableontheday9page).Torunit:

ExaminethecodeinfitDeltaE.cctoseewhatitdoes.UncommentsomeofthelinesI'vecommentedout,
andobservetheresults.

ModifyfitDeltaE.cctouseaCrystalBallinsteadofaGaussianforthesignalpeak.(Thiswillhelpwith
thetailontheleftsideofthepeak.)

TrytofittheMbcdistributionwithanArgusbackgroundshapeandapeakofsomesort(Gaussian,
CrystalBall,Gaussian+CrystalBall).MuchofthecodecanbecopiedfromfitDeltaE.ccjustswitch
deltaEtoMbcandchangethefitfunctions.I'vewrittenafunctioninfitMbc.cctodothis,solookatthatif
yougetstuck.However,youshouldtrytowriteityourselffirst.(YoumaywanttolookataplotofMbc
firstbeforeyoutrytofitit.)
.LfitDeltaE.cc
fitDeltaE(0)//forD0>Kpi(1forKpipi0,200forD+>Kpipi,201forKpipipi0)
30 SteveStroiney CLEO101,Day8FittingwithRooFit
EverythingBeginswithRoo!
TheEnd