Hi Daniel,
Your function PulseShape is independent of coeff[1] !
One cannot draw the same function with different parameters in the way
you do it. Remember that a pad has a reference to the object to be drawn.
You should replace the first
PulseShape->Draw();
by
PulseShape->DrawCopy();
Rene Brun
On Wed, 20 Sep 2000 ott@ciemat.es wrote:
> Hi,
>
> I have a problem when trying to plot an function after having changed the
> parameters. Either the Integral nor the plot change after calling
> fun->SetParameters. Although, the parameters have been really modified
> beacause I have checked it with GetParameters. Could somebody please give
> me some hint about what I'm doing wrong?
>
> Thanks a lot,
>
> Daniel
>
> PD this is the macro I using
>
>
>
> #include <iostream.h>
>
> Double_t PulseShape(Double_t *x, Double_t *par)
> {
> Double_t arg = 0;
> Double_t val = 0;
> if(x[0] < par[4])
> {
> val = par[0];
> }
> else if (x[0] >= par[4] & x[0] < par[5])
> {
> val = par[7]*x[0]+par[8];
> }
> else if (x[0] >= par[5] & x[0] < par[6])
> {
> val = par[9]*x[0]+par[10];
> }
> else if (x[0] >= par[6])
> {
> val = par[0] + par[2]*TMath::Exp( -(x[0]-par[6])/par[3] );
> }
> Double_t fitval = par[0]*TMath::Exp(-0.5*arg*arg);
> return val;
> }
>
> int main()
> {
> gROOT->Reset();
> const Int_t npar = 11;
> Int_t i,j;
> Double_t coeff[11];
> Double_t mod_coeff[11];
> Double_t Amplitude;
>
> // Amplitude
> Amplitude = -225.47;
> // Define function coefficients
>
> coeff[0]=0.0;
> coeff[1]= Amplitude;
> coeff[2]=coeff[1]/7.1915667;
> coeff[3]=703.7;
> coeff[4]=51.356;
> coeff[5]=55.131;
> coeff[6]=63.813;
> coeff[7]=-coeff[1]/(coeff[4]-coeff[5]);
> coeff[8]=coeff[0]-coeff[7]*coeff[4];
> coeff[9]=(coeff[1]-coeff[2])/(coeff[5]-coeff[6]) ;
> coeff[10]=coeff[0]+coeff[2]-coeff[9]*coeff[6];
>
> for (i=0; i<npar; i++)
> {
> printf("The value of coefficient %d is %8f\n",i+1,coeff[i]);
> }
>
> TF1 *PulseShape = new TF1("PulseShape",PulseShape,-100.,100.,11);
> PulseShape->SetParameters(coeff);
> PulseShape->Draw();
>
> //Modify one coefficient
> gRandom->SetSeed();
> coeff[1] = Amplitude*gRandom->Gaus(1.,0.5);
>
> printf("The amplitude of the pulse is %8f\n",coeff[1]);
> //Check that the coefficient was modified
> for (i=0; i<npar; i++)
> {
> printf("The value of coefficient %d is %8f\n",i+1,coeff[i]);
> }
> PulseShape->SetParameters(coeff);
>
> //Retrieve coefficients to see if the function has adopted them
> PulseShape->GetParameters(mod_coeff);
> for (i=0; i<npar; i++)
> {
> printf("The value of new coefficient %d is %8f\n",i+1,mod_coeff[i]);
> }
> //Plot the new function
> PulseShape->Draw("same");
> return 0;
> }
>
>
>
>
> -------------------------------------
> Daniel Cano Ott
>
> CIEMAT
> Facet Group, Dept. of Nuclear Fission
> Avda. Complutense 22
> 28040 Madrid
> SPAIN
>
> Tel: 34-913466000 Ext 6782 9:00 AM - 5:00 PM
> 34-913466123 After 5:00 PM
>
> FAX: 34-913466576
>
> http://fachp1.ciemat.es/daniel.html
>
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:33 MET