I’m fitting a linear function to some data and I after that I want to play around a little bit with the results. I want to divide the parameters and through propagation of uncertainty I want to get the error of this division.
Therefore I need to covariance between the two parameters, which I now obtain in the following way:
// Initialize the fit function and fit (in the initialization function I set the parameters and the range and stuff) initFit(colors[metalN], lowEdge[metalN], highEdge[metalN]); TFitResultPtr r = myProj->Fit("fitFun", "0RS"); // Get all information from the fit TMatrixDSym cov = r->GetCovarianceMatrix(); double par0 = r->Parameter(0); double par1 = r->Parameter(1); double err0 = r->ParError(0); double err1 = r->ParError(1); double det = cov.Determinant(); double covar = -TMath::Sqrt(err0*err0*err1*err1-det); r->Print("V"); double x = -par0/par1; double ex = TMath::Sqrt(x*x*((err0*err0)/(par0*par0)+(err1*err1)/(par1*par1)-2*(covar)/(par0*par1)) );
In which x is the division I want to do and ex is the uncertainty in this division
As you can see I take the errors^2 in the two parameters and then subtract the determinant of the covariance matrix to obtain the covariance^2 between the two parameters.
But I feel like this there might be an easier solution, because I feel like there must be a way to access the elements in the covariance matrix directly. In that case I do not need to do the algebra with the determinant to obtain the off diagonal elements of the matrix. However, I can’t find anything like cov.Getelement(i,j).
So the question is, is there a function to get an element of the covariance matrix? Especially since in my case the covariance is negative and therefore I have to multiply by minus one for the covar double, which is a little artificial maybe. I know that the covariance is negative because I print the result in the screen.
Thanks a lot,