Re: How can I execute a macro that calls a function?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Mar 06 1998 - 08:51:49 MET


In your macro below, replace the VERY CONFUSING notation **
by the standard array notation and your program will work.
change:

  for (Int_t i=0; i<n; i++) {
    tt1 = tt1 + 1 * *(w+i) * *(w+i);
    tt2 = tt2 + *(x+i) * *(x+i) * *(w+i) * *(w+i);
    tt3 = tt3 + *(x+i) * *(w+i) * *(w+i);
    tt4 = tt4 + *(y+i) * *(w+i) * *(w+i);
    tt5 = tt5 + *(y+i) * *(x+i) * *(w+i) * *(w+i);
  }
to:
  for (Int_t i=0; i<n; i++) {
    tt1 = tt1 + 1 * w[i] * w[i];
    tt2 = tt2 + x[i] * x[i] * w[i] * w[i];
    tt3 = tt3 + x[i] * w[i] * w[i];
    tt4 = tt4 + y[i] * w[i] * w[i];
    tt5 = tt5 + y[i] * x[i] * w[i] * w[i];
  }

Rene Brun



> Hi,
> I tried to execute a macro("ytrack.C") that calls a function("sfit") but
> it gives the following error message.
> 
> To execute a macro("ytrack.C"), I typed
>         root [0] .x ytrack.C
> 
> Is there something wrong with handling pointers in my function "sfit"?
> In the sense of C it should be no problem.
> 
> Or is there something wrong with handling function inside ROOT
> interpreter? My function "sfit" does not return any value. It assigns a
> value on variable that is in "ytrack.C" using pointer.
>                                         ^^^^^^^^^^^^^^
> Stand alone version of "ytrack.C" had no problem.
> 
> ======================== Error message ==============================
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:10
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:10
> * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11
> Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:11
> * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12
> Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:12
> * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13
> Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:13
> * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14
> Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:14
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9
> 
> ================================ "ytrack.C" is ================
> // function declaration
> void sfit(Int_t n,Float_t *x,Float_t *y,Float_t *w,Float_t *pb0,Float_t
> *pb1);
> 
> // function definition
> void sfit(Int_t n,Float_t *x,Float_t *y,Float_t *w,Float_t *pb0,Float_t
> *pb1)
> {
> 
>   Float_t  tt1,tt2,tt3,tt4,tt5,ss;
> 
>   tt1 = tt2 = tt3 = tt4 = tt5 = 0.;
> 
>   for (Int_t i=0; i<n; i++) {
>     tt1 = tt1 + 1 * *(w+i) * *(w+i);
>     tt2 = tt2 + *(x+i) * *(x+i) * *(w+i) * *(w+i);
>     tt3 = tt3 + *(x+i) * *(w+i) * *(w+i);
>     tt4 = tt4 + *(y+i) * *(w+i) * *(w+i);
>     tt5 = tt5 + *(y+i) * *(x+i) * *(w+i) * *(w+i);
>   }
> 
>   ss = tt1*tt2 - tt3*tt3;
> 
>   if (ss == 0) {
>     *pb0 = -999;
>     *pb1 = -999;
>   }
>   else {
>     *pb0 = (tt2*tt4 - tt5*tt3)/ss;
>     *pb1 = (tt1*tt5 - tt3*tt4)/ss;
>   }
> }
> 
> // main function
> void ytrack()
> {
>   Int_t    noy;
> 
>   Float_t  szzy[5];
>   Float_t  sypos[5];
>   Float_t  syesum[5];
>   Float_t  silyin;
>   Float_t  b0,b1;
> 
>         ... processing data & assign values on noy,szzy,sypos,syesum
> 
>         //call function "sfit"
>         sfit(noy,szzy,sypos,syesum,&b0,&b1);
> 
>         silyin = b0 + b1*46.764;
>         printf("%g\n",silyin);
> 
> }
> ==========================================================================
> 
> ---
> Thanks a lot!
> Jayoung Wu
> 
>



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:30 MET