HI,
I try to evaluate a compiled function wich is loaded as part of a shared
library into root.
After initalization of the parameters TF1::Eval leads to a segmentation
violation in the
interpeter. I think the address of the parameter array is not set
correctly in TF1:InitArgs(),
but I have no idea why.
This is what I type in the Interpreter:
PTSig =
new TF1("PTSig",PTSignalFunc,0,40,6);
PTSig->SetParName(0,"TotalEnergy");
PTSig->SetParName(1,"E3");
PTSig->SetParName(2,"PT1");
PTSig->SetParName(3,"PT2");
PTSig->SetParName(4,"Sigma0");
PTSig->SetParName(5,"Psi");
PTSig->SetParameter(0,30);
PTSig->SetParameter(1,15);
PTSig->SetParameter(2,1/sqrt(2));
PTSig->SetParameter(3,1/sqrt(2));
PTSig->SetParameter(4,1);
PTSig->SetParameter(5,0);
PTSig->Print();
PTSig : Ndim= 1, Npar= 6, Noper= 0
Par 0 TotalEnergy = 30
Par 1 E3 = 15
Par 2 PT1 = 0.707107
Par 3 PT2 = 0.707107
Par 4 Sigma0 = 1
Par 5 Psi = 0
root [0] PTSig->Eval(0)
Calling1
*** Break *** segmentation violation
Root >
This is the compiled function. It is defined in the coresponding header
file as
extern Double_t PTSignal(...);
Double_t PTSignalFunc(Double_t *t, Double_t *par){
cout << "Calling" << par <<endl;
for(Int_t i =0; i <6; i++){
cout <<"Par: " << par[0] << endl ;
cout<< par[i] << endl;
}
return PTSignal(par[0], par[1], *t, par[2], par[3], par[4], par[5]);
}
--
Norbert Danneberg
ETH Zurich - Institute for Particle Physics
Laboratory for Nuclear Physics Phone.: +41-1-633-2034
Hoenggerberg Fax.: +41-1-633-1067
CH-8093 Zurich
ETH Zurich - Institute for Particle Physics
Paul Scherrer Institute Phone.: +41-56-310-3284
CH-5232 Villigen PSI Fax.: +41-56-310-4362
email: Norbert.Danneberg@psi.ch
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:38 MET