Hi, I haven't seen much discussion on roottalk about pyroot, so I'm not sure if this is the best place to ask my questions. Please let me know if I should direct my queries elsewhere. I'm having a hard time getting at Minuit's error matrix from a python script. Two methods to access the error matrix (from C++) are given in the TH1 documentation: > Access to the fit covariance matrix > =================================== > Example1: > TH1F <http://root.cern.ch/root/html/TH1F.html> h("h","test",100,-2,2); > h.FillRandom <http://root.cern.ch/root/html/TH1.html#TH1:FillRandom>("gaus",1000); > h.Fit <http://root.cern.ch/root/html/TH1.html#TH1:Fit>("gaus"); > Double_t <http://root.cern.ch/root/html/ListOfTypes.html#Double_t> matrix[3][3]; > gMinuit <http://root.cern.ch/root/html/TMinuit.html>->mnemat <http://root.cern.ch/root/html/TMinuit.html#TMinuit:mnemat>(&matrix[0][0],3); > Example2: > TH1F <http://root.cern.ch/root/html/TH1F.html> h("h","test",100,-2,2); > h.FillRandom <http://root.cern.ch/root/html/TH1.html#TH1:FillRandom>("gaus",1000); > h.Fit <http://root.cern.ch/root/html/TH1.html#TH1:Fit>("gaus"); > TMatrixD <http://root.cern.ch/root/html/TMatrixD.html> matrix(npar,npar); > gMinuit <http://root.cern.ch/root/html/TMinuit.html>->mnemat <http://root.cern.ch/root/html/TMinuit.html#TMinuit:mnemat>(matrix.GetElements(),npar); > matrix.Print <http://root.cern.ch/root/html/TH1.html#TH1:Print>(); > matrix.Draw <http://root.cern.ch/root/html/TH1.html#TH1:Draw>("text"); I'm having two problems with this approach. First, I can't find gMinuit at all. I can get gROOT, gGeometry, and gDirectory like this: >>> not not ROOT.gROOT.GetGlobal( 'gDirectory' ) True <>But not gMinuit: >>> not not ROOT.gROOT.GetGlobal( 'gMinuit' ) False I can get fits to work, so the object does exist somewhere. My second problem is that I don't see how to implement either of these methods in python. I can't make a 2-D matrix with "Double_t matrix[3][3]" and pass it to mnemat() through pyroot. I CAN create a TMatrixD, but the only methods to access the elements are overloaded array-lookup operators (irritating!), and I can't find a way to use these through pyroot. It would be very nice (feature request) if a GetErrorMatrixElem(ipar, jpar) method would be added to TF1 which does all the work of mapping parameters to Minuit's reduced free-parameter list, and returns the corresponding element in the error matrix. It doesn't sound like that should be too hard -- should I attempt it myself? Thanks in advance for any help on these problems! Topher Cawlfield p.s. I really appreciate pyROOT! Thanks! This was the final ingredient that I was hoping for to create a "timeline" system for CLEO. What I needed was a way to access histogram files, initially in hbook (zebra) format, through a high-level language like Perl, Python, Ruby, etc. The combination of h2root and pyroot was just perfect, and Python is proving itself to be the ideal language for the project in other ways as well. I'm implementing a general-purpose fitting capability, and ran into trouble computing the error in the yield of a fit of gaus + background. Root (inheriting bad genes from PAW) uses a most unfortunate parameterization for Gaussians, picking amplitude instead of area for the first parameter. So to get the error in the yield one needs the error in the amplitude, error in the width, and the correlation coefficient between the two. Really tragic since we all like to fit Gaussians for yields twice each morning before breakfast.
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET