{ auto myhist = new TH2D("h1","2DGaussian",300,-3,3,300,-3,3); TRandom3 foo(12345); for(int i=0;i<10000;i++) { myhist->Fill(foo.Gaus(0,1),foo.Gaus(0,1)); } const int exbins=myhist->GetNbinsX(); const int whybins=myhist->GetNbinsY(); TMatrixD Amatrix(exbins,whybins); Amatrix.Zero(); for (int xbin=1;xbin<=exbins;xbin++) { for (int ybin=1;ybin<=whybins;ybin++) { Amatrix(whybins-ybin,xbin-1)=myhist->GetBinContent(xbin,ybin); }//end of loop over y bins }//end of loop over xbins TDecompSVD svd(Amatrix,0.00001); //Decomp my A matrix with a tolerance of 1e-5 Bool_t ok; TH1D *hdata = new TH1D("mydataexample","mydataexample",300,0.01,10); for (int i=0;i<10000;i++) { hdata->Fill(foo.Gaus(2,5)); } const int exdata=hdata->GetNbinsX(); TVectorD matdata(exdata); matdata.Zero(); for (int xbin=1;xbin<=exdata;xbin++) { matdata(xbin-1)=hdata->GetBinContent(xbin); }//end of loop over xbins const TVectorD c_svd = svd.Solve(matdata,ok); std::cout << ok << std::endl; c_svd.Print(); }