#include "TCanvas.h" #include "TH1.h" #include "TF1.h" #include "TGraph.h" #include "TMinuit.h" #include "TROOT.h" //Script to show bug in TMinuit //uname -a -> Linux phnpc08.extra.cea.fr 2.6.9-42.0.3.ELlargesmp #1 SMP Thu Oct 5 16:46:10 CDT 2006 x86_64 x86_64 x86_64 GNU/Linux //root-config --version -> 5.15/07 //Running with willfail = true gives //*** glibc detected *** free(): invalid next size (normal): //Stacktrace /* (gdb) bt #0 0x00000034fba2e21d in raise () from /lib64/tls/libc.so.6 #1 0x00000034fba2fa1e in abort () from /lib64/tls/libc.so.6 #2 0x00000034fba63221 in __libc_message () from /lib64/tls/libc.so.6 #3 0x00000034fba68e3e in _int_free () from /lib64/tls/libc.so.6 #4 0x00000034fba69186 in free () from /lib64/tls/libc.so.6 #5 0x00000032e04ae29e in operator delete () from /usr/lib64/libstdc++.so.6 #6 0x0000002a986815cb in TMinuit::DeleteArrays () from /home/jljungva/root/lib/root/libMinuit.so #7 0x0000002a98681e50 in TMinuit::~TMinuit () from /home/jljungva/root/lib/root/libMinuit.so #8 0x0000002a9866a469 in TFitter::~TFitter () from /home/jljungva/root/lib/root/libMinuit.so #9 0x0000002a9758f2b3 in TGraph::Fit () from /home/jljungva/root/lib/root/libGraf.so #10 0x0000002a987d0d62 in minuittest (willfail=true) at /dsm/phnpc08/structureNucleaire/spectroscopie/joa/roottest/./miniuttest.C:58 #11 0x0000002a987d0e37 in G__filexQunuA__0_1204 (result7=0x7fbffe9f60, funcname=0x9b8250 "\001", libp=0x7fbffe3d50, hash=0) at /dsm/phnpc08/structureNucleaire/spectroscopie/joa/roottest/./filexQunuA.cxx:70 #12 0x0000002a95f1b0fc in G__call_cppfunc () from /home/jljungva/root/lib/root/libCint.so #13 0x0000002a95f032b0 in G__interpret_func () from /home/jljungva/root/lib/root/libCint.so #14 0x0000002a95ef1d44 in G__getfunction () from /home/jljungva/root/lib/root/libCint.so #15 0x0000002a95ec89e4 in G__getitem () from /home/jljungva/root/lib/root/libCint.so #16 0x0000002a95ecccda in G__getexpr () from /home/jljungva/root/lib/root/libCint.so #17 0x0000002a95f3b921 in G__exec_function () from /home/jljungva/root/lib/root/libCint.so #18 0x0000002a95f40456 in G__exec_statement () from /home/jljungva/root/lib/root/libCint.so #19 0x0000002a95eb5a9d in G__exec_tempfile_core () from /home/jljungva/root/lib/root/libCint.so #20 0x0000002a95eb5d9e in G__exec_tempfile_fp () from /home/jljungva/root/lib/root/libCint.so #21 0x0000002a95f4945f in G__process_cmd () from /home/jljungva/root/lib/root/libCint.so #22 0x0000002a95755f95 in TCint::ProcessLine () from /home/jljungva/root/lib/root/libCore.so #23 0x0000002a956cfe15 in TApplication::ProcessLine () from /home/jljungva/root/lib/root/libCore.so #24 0x0000002a9664e6c0 in TRint::HandleTermInput () ---Type to continue, or q to quit--- from /home/jljungva/root/lib/root/libRint.so #25 0x0000002a9664cf67 in TTermInputHandler::Notify () from /home/jljungva/root/lib/root/libRint.so #26 0x0000002a9664ee0d in TTermInputHandler::ReadNotify () from /home/jljungva/root/lib/root/libRint.so #27 0x0000002a9577e883 in TUnixSystem::CheckDescriptors () from /home/jljungva/root/lib/root/libCore.so #28 0x0000002a95782989 in TUnixSystem::DispatchOneEvent () from /home/jljungva/root/lib/root/libCore.so #29 0x0000002a95720bd5 in TSystem::InnerLoop () from /home/jljungva/root/lib/root/libCore.so #30 0x0000002a95720b6d in TSystem::Run () from /home/jljungva/root/lib/root/libCore.so #31 0x0000002a956cfeef in TApplication::Run () from /home/jljungva/root/lib/root/libCore.so #32 0x0000002a9664d6bf in TRint::Run () from /home/jljungva/root/lib/root/libRint.so #33 0x000000000040106d in main () */ void minuittest(bool willfail = false) { if(gROOT->GetListOfFunctions()->FindObject("g")) { TF1 *tmp = (TF1*)gROOT->GetListOfFunctions()->FindObject("g"); tmp->Delete(); } TF1 *g = new TF1("g","gaus"); g->SetParameter(0,10); g->SetParameter(1,5); g->SetParameter(2,1); g->SetRange(0,10); if(gROOT->GetList()->FindObject("fhTest")) (gROOT->GetList()->FindObject("fhTest")->Delete()); if(gROOT->GetList()->FindObject("p2")) (gROOT->GetList()->FindObject("p2")->Delete()); if(gROOT->GetListOfCanvases()->FindObject("cas2")) ((TCanvas*)gROOT->GetListOfCanvases()->FindObject("cas2"))->Close(); TH1F *fhTest = new TH1F("fhTest","fhTest",256,0,10); fhTest->FillRandom("g",2000); fhTest->Fit(g,"RN"); g->SetParameter(1,4.5); if(willfail) gMinuit->Command("SCAN 2 100 4.8 5.2"); else gMinuit->Command("SCAN 2 100"); TGraph *graph = (TGraph*)gMinuit->GetPlot(); TGraph *graph2 = new TGraph; for (int i=0; iGetN(); i++){ double x,y; graph->GetPoint(i,x,y); graph2->SetPoint(i,x,y); } if(willfail) gMinuit->Command("SCAN 1 100 25 35"); else gMinuit->Command("SCAN 1 100"); TCanvas *cas2 = new TCanvas("cas2"); cas2->cd(1); graph2->Draw("al"); TF1 *p2 = new TF1("p2","pol2"); p2->SetRange(g->GetParameter(1)-0.1, g->GetParameter(1)+0.5); graph2->Fit(p2,"R"); }