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