Wenn mehrere Parameter simultan gefittet werden ist es wichtig neben den Werten und Fehlern der Parameter auch die Korrelationen zu untersuchen.
In ROOT sind diese Informationen prinzipiell verfügbar, allerdings etwas versteckt und nicht direkt über das FitPanel abrufbar.
Für Fits die mit Minuit gemacht werden liefert folgende Funktion die Kovarianz- bzw. Korrelationsmatrix:
TMatrixD * GetCovMat( int ndim, bool print = false, bool corrmat = false ) { TMatrixD td(ndim,ndim); gMinuit->mnemat(td.GetMatrixArray(),ndim); if ( corrmat ) { for ( int i=0; i<ndim; i++ ) { for ( int j=i+1; j<ndim; j++ ) { double cor = td(i,j) / sqrt( td(i,i) * td(j,j) ); td(i,j) = cor; if ( i != j ) { // copy off diag elem td(j,i) = td(i,j); } } td(i,i) = 1.0; } } if ( print ) td.Print(); return ( new TMatrixD(td)); }
C/C++ Tricks:
Contour-Plot
In Minuit Funktion gMinuit->Contour(...) , die direkt als TGraph-Objekt und zum Zeichnen der Contour benutzt werden kann:
void plotContour( int i, int j ) { // make contour plot for two vars: TGraph *gr2 = (TGraph*)gMinuit->Contour(80,i,j); gr2->SetFillColor(42); gr2->Draw("alf"); // central value double pi, dpi; double pj, dpj; gMinuit->GetParameter( i, pi, dpi) ; gMinuit->GetParameter( j, pj, dpj) ; TMarker *marker = new TMarker(pi,pj,20); marker->Draw(); }