Re: I don't understand the ERROR message ?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Feb 25 1998 - 12:07:00 MET


Jayoung Wu wrote:
> 
> Hi,
> I am trying to read an ascii file("mmi.50") and create a ROOT
> file("aticdata.root") using a ROOT Tree structure.
> The file name for that is "maketree.C".
> However when I execute it in root it gives the following error message:
> 
> root [1] .x maketree.C
> Error: No symbol maketree() in current scope  FILE: LINE:0
> NULL
> *** Interpreter error recovered ***

You do not have a maketree function in your file maketree.C.
To make your program working, replace the statement
main()
by
void maketree()

I also suggest you delete the "C" style notation
#define NUMOFEVENTS 10
#define MAXLINE 100
by
const Int_t NUMOFEVENTS = 10;
const Int_t MAXLINE = 100;
inserted in your function maketree.

Using CINT, you can do
 .x maketree.C
in the two following cases:
  1- you have a function named maketree in the file maketree.C
  2- your file maketree.C does not contain any named functions.

Rene Brun


> Do you have any idea about it?
> Actually my code("maketree.C") is not completed yet.
> To create a Tree I added just following lines:
>         //* Reset the environment
>         gROOT->Reset();
> 
>         //* Create a new ROOT binary machine independant file
>         TFile *f = new TFile("aticdata.root","RECREATE");
> 
>         // input file
>         fp = fopen("/export/data/aticd8/jay8/mcmurdoi/mmi.50","rt");
> 
>         //* Create a ROOT Tree and branches
>         TTree *tree = new TTree("EVENT","Event Tree");
>         TBranch *branch1 = tree->Branch("SUM",&sum,"sum/F");
>         TBranch *branch2 = tree->Branch("INTRPOS",intrpos,"intrpos/F");
>         TBranch *branch3 = tree->Branch("BGO",bgo,"bgo/F");
> 
> Except those everything is just plain C for reading a ascii file.
> 
> --------------------------------------------------------------------------
> The following is "maketree.C".
> 
> ----
> Thanks a lot!
> Jayoung Wu
> 
>     ---------------------------------------------------------------
> #include <stdio.h>
> 
> #define NUMOFEVENTS 10
> #define MAXLINE 100
> 
> int NumberOfChar(char s[],char c);
> void ReplaceWithBlank(char s[],char c);
> 
> int NumberOfChar(char s[],char c)
> {
>   int i;
>   int n=0;
>   for (i=0; s[i]!='\0'; i++) if(s[i]==c) n++;
>   return n;
> }
> 
> void ReplaceWithBlank(char s[],char c)
> {
>   int i,j;
>   for(i=j=0; s[i]!='\0'; i++)
>     if(s[i]!=c)
>       s[j++]=s[i];
>     else
>       s[j++]=' ';
> }
> 
> main()
> {
>   FILE   *fp;
>   Int_t  event;
>   Int_t  theno;
>   Int_t  i,j,k;
>   Int_t  l;
>   Char_t line[110];
>   Char_t s1[30],s2[30],s3[30],s4[30],s5[30],s6[30],s7[30],s8[30],s9[30],s0[30];
> 
> // variables to save information
>   Int_t    evno;
>   Long_t   rndm[2];
>   Int_t    pid;
>   Float_t  ke;
>   Int_t    area;
>   Int_t    flag;
>   Float_t  ipos[3];
>   Float_t  imom[3];
>   Float_t  theta, phi;
>   Float_t  intrpos[3];
>   Float_t  inconly[10];
>   Float_t  si1[28][11][4], si2[28][11][4], si3[28][10][4], si4[28][10][4];
>   Float_t  scn1[2][43], scn2[2][36], scn3[2][25];
>   Float_t  bgo[10][2][20];
>   Float_t  sum;
> 
> //* Reset the environment
>   gROOT->Reset();
> 
> //* Create a new ROOT binary machine independant file
>   TFile *f = new TFile("aticdata.root","RECREATE");
> 
> // input file
>   fp = fopen("/export/data/aticd8/jay8/mcmurdoi/mmi.50","rt");
> 
> //* Create a ROOT Tree and branches
>   TTree *tree = new TTree("EVENT","Event Tree");
>   TBranch *branch1 = tree->Branch("SUM",&sum,"sum/F");
>   TBranch *branch2 = tree->Branch("INTRPOS",intrpos,"intrpos/F");
>   TBranch *branch3 = tree->Branch("BGO",bgo,"bgo/F");
> 
> // read data
>   for(event=1; event<=NUMOFEVENTS; event++)
>     {
> 
> // initialize with 0
>       for(i=0; i<28; i++)
>         for(j=0; j<11; j++)
>           for(k=0; k<4; k++)
>             {
>               si1[i][j][k]=0.0;
>               si2[i][j][k]=0.0;
>             }
> 
>       for(i=0; i<28; i++)
>         for(j=0; j<10; j++)
>           for(k=0; k<4; k++)
>             {
>               si3[i][j][k]=0.0;
>               si4[i][j][k]=0.0;
>             }
> 
>       for(i=0; i<2; i++)
>         for(j=0; j<43; j++) scn1[i][j]=0.0;
> 
>       for(i=0; i<2; i++)
>         for(j=0; j<36; j++) scn2[i][j]=0.0;
> 
>       for(i=0; i<2; i++)
>         for(j=0; j<25; j++) scn3[i][j]=0.0;
> 
>       for(i=0; i<10; i++)
>         for(j=0; j<2; j++)
>           for(k=0; k<20; k++) bgo[i][j][k]=0.0;
> 
> 
> // incident information
>       fscanf(fp,"%s%s%d,%s%s%ld%ld",s1,s2,&evno,s4,s5,&rndm[0],&rndm[1]);
> 
>       fscanf(fp,"%s%s%s%s%d%s%s%f%s%s%d%s%s%d",
>              s1,s2,s3,s4,&pid,s5,s6,&ke,s7,s8,&area,s9,s0,&flag);
> 
>       fscanf(fp,"%s%s%s%f%f%f",
>              s1,s2,s3,&ipos[0],&ipos[1],&ipos[2]);
> 
>       fscanf(fp,"%s%s%s%f%f%f",
>              s1,s2,s3,&imom[0],&imom[1],&imom[2]);
> 
>       fscanf(fp,"%s%s%s%s%s%f%f",
>              s1,s2,s3,s4,s5,&theta,&phi);
> 
> // 1st intr. position
>       fscanf(fp,"%s%s%s%s%s%s%f%f%f",
>              s1,s2,s3,s4,s5,s6,&intrpos[0],&intrpos[1],&intrpos[2]);
> 
> // incident only information(sili, scn)
>       fscanf(fp,"%s%s%s%s%s",s1,s2,s3,s4,s5);
> 
>       for(i=0; i<=9; i++)
>         fscanf(fp,"%s%g%s",s1,&inconly[i],s2);
> 
> // ENERGY DEPOSITION EACH SILICON LAYER
>       fscanf(fp,"%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6);
>       fscanf(fp,"%s%s%s%d",s1,s2,s3,&l); //SILICON LAYER = 1
>       fgets(line,MAXLINE,fp);
> 
>       fgets(line,MAXLINE,fp);
>       theno = NumberOfChar(line,'[');
> 
>       while(theno)
>         {
>           int   itemp[5]={0,0,0,0,0};
>           float temp[5]={0.,0.,0.,0.,0.};
> 
>           ReplaceWithBlank(line,'[');
>           ReplaceWithBlank(line,']');
> 
>           if(theno == 1)
>             sscanf(line,"%d%g",&itemp[0],&temp[0]);
>           else if(theno == 2)
>             sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>           else if(theno == 3)
>             sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2]);
>           else if(theno == 4)
>             sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],&temp[3]);
>           else if(theno == 5)
>             sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],
>                    &itemp[3],&temp[3],&itemp[4],&temp[4]);
>           else
>             printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>           for(j=1; j<=theno; j++)
>             {
>               int iy,ix,ip; //iy is ladder no.
> 
>               iy = (itemp[j-1]-1)/44 + 1;
>               ix = (itemp[j-1]-(iy-1)*44-1)/4 + 1;
>               ip = itemp[j-1]-(iy-1)*44-(ix-1)*4;
> 
>               si1[iy-1][ix-1][ip-1] = temp[j-1];
>             }
> 
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
>         }
> 
>       fscanf(fp,"%s%s%s%d",s1,s2,s3,&l); //SILICON LAYER = 2
>       fgets(line,MAXLINE,fp);
> 
>       fgets(line,MAXLINE,fp);
>       theno = NumberOfChar(line,'[');
> 
>       while(theno)
>         {
>           int   itemp[5]={0,0,0,0,0};
>           float temp[5]={0.,0.,0.,0.,0.};
> 
>           ReplaceWithBlank(line,'[');
>           ReplaceWithBlank(line,']');
> 
>           if(theno == 1)
>             sscanf(line,"%d%g",&itemp[0],&temp[0]);
>           else if(theno == 2)
>             sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>           else if(theno == 3)
>             sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2]);
>           else if(theno == 4)
>             sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],&temp[3]);
>           else if(theno == 5)
>             sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],
>                    &temp[3],&itemp[4],&temp[4]);
>           else
>             printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>           for(j=1; j<=theno; j++)
>             {
>               int iy,ix,ip; //iy is ladder no.
> 
>               iy = (itemp[j-1]-1)/44 + 1;
>               ix = (itemp[j-1]-(iy-1)*44-1)/4 + 1;
>               ip = itemp[j-1]-(iy-1)*44-(ix-1)*4;
> 
>               si2[iy-1][ix-1][ip-1] = temp[j-1];
>             }
> 
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
>         }
> 
>       fscanf(fp,"%s%s%s%d",s1,s2,s3,&l); //SILICON LAYER = 3
>       fgets(line,MAXLINE,fp);
> 
>       fgets(line,MAXLINE,fp);
>       theno = NumberOfChar(line,'[');
> 
>       while(theno)
>         {
>           int   itemp[5]={0,0,0,0,0};
>           float temp[5]={0.,0.,0.,0.,0.};
> 
>           ReplaceWithBlank(line,'[');
>           ReplaceWithBlank(line,']');
> 
>           if(theno == 1)
>               sscanf(line,"%d%g",&itemp[0],&temp[0]);
>           else if(theno == 2)
>             sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>           else if(theno == 3)
>             sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2]);
>           else if(theno == 4)
>             sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],&temp[3]);
>           else if(theno == 5)
>             sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],
>                    &temp[3],&itemp[4],&temp[4]);
>           else
>             printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>           for(j=1; j<=theno; j++)
>             {
>               int iy,ix,ip; //iy is ladder no.
> 
>               iy = (itemp[j-1]-1)/40 + 1;
>               ix = (itemp[j-1]-(iy-1)*40-1)/4 + 1;
>               ip = itemp[j-1]-(iy-1)*40-(ix-1)*4;
> 
>               si3[iy-1][ix-1][ip-1] = temp[j-1];
>             }
> 
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
>         }
> 
>       fscanf(fp,"%s%s%s%d",s1,s2,s3,&l); //SILICON LAYER = 4
>       fgets(line,MAXLINE,fp);
> 
>       fgets(line,MAXLINE,fp);
>       theno = NumberOfChar(line,'[');
> 
>       while(theno)
>         {
>           int   itemp[5]={0,0,0,0,0};
>           float temp[5]={0.,0.,0.,0.,0.};
> 
>           ReplaceWithBlank(line,'[');
>           ReplaceWithBlank(line,']');
> 
>           if(theno == 1)
>               sscanf(line,"%d%g",&itemp[0],&temp[0]);
>           else if(theno == 2)
>             sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>           else if(theno == 3)
>             sscanf(line,"%d%g%d%%d%gg",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2]);
>           else if(theno == 4)
>             sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],&temp[3]);
>           else if(theno == 5)
>             sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],
>                    &itemp[1],&temp[1],&itemp[2],&temp[2],&itemp[3],
>                    &temp[3],&itemp[4],&temp[4]);
>           else
>             printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>           for(j=1; j<=theno; j++)
>             {
>               int iy,ix,ip; //iy is ladder no.
> 
>               iy = (itemp[j-1]-1)/40 + 1;
>               ix = (itemp[j-1]-(iy-1)*40-1)/4 + 1;
>               ip = itemp[j-1]-(iy-1)*40-(ix-1)*4;
> 
>               si4[iy-1][ix-1][ip-1] = temp[j-1];
>             }
> 
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
>         }
> 
> //energy deposition in each scintillator layer
>       fgets(line,MAXLINE,fp);   //ENERGY DEPOSITION EACH SCINTILLATOR LAYER
>       fgets(line,MAXLINE,fp);   //read blank line
> 
>       for(k=1; k<=3; k++)   //1-SCN1, 2-SCN2, 3-SCN3
>         {
>           for(i=1; i>=0; i--)   //1-upper, 0-lower
>             {
>               fgets(line,MAXLINE,fp); //LAYER=SCN1X(upper), LAYER=SCN1Y(lower)
>               fgets(line,MAXLINE,fp);
>               theno = NumberOfChar(line,'[');
> 
>               while(theno)
>                 {
>                   int   itemp[5]={0,0,0,0,0};
>                   float temp[5]={0.,0.,0.,0.,0.};
> 
>                   ReplaceWithBlank(line,'[');
>                   ReplaceWithBlank(line,']');
> 
>                   if(theno == 1)
>                     sscanf(line,"%d%g",&itemp[0],&temp[0]);
>                   else if(theno == 2)
>                     sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>                   else if(theno == 3)
>                     sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                            &itemp[2],&temp[2]);
>                   else if(theno == 4)
>                     sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                            &itemp[2],&temp[2],&itemp[3],&temp[3]);
>                   else if(theno == 5)
>                     sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                            &itemp[2],&temp[2],&itemp[3],&temp[3],
>                            &itemp[4],&temp[4]);
>                   else
>                     printf("Error on Reading Edep in SILICON: theno=%d\n",
>                            theno);
> 
>                   for(j=1; j<=theno; j++)
>                     {
>                       int is; //iy is strip no.
> 
>                       is = itemp[j-1];
> 
>                       if (k==1)                     //SCN1
>                         scn1[i][is-1] = temp[j-1];
>                       else if (k==2)                //SCN2
>                         scn2[i][is-1] = temp[j-1];
>                       else                          //SCN3
>                         scn3[i][is-1] = temp[j-1];
>                     }
> 
>                   fgets(line,MAXLINE,fp);
>                   theno = NumberOfChar(line,'[');
>                 }
>             }
>         }
> 
> // energy deposition in each bgo crystal bar
>       fgets(line,MAXLINE,fp);   //ENERGY DEPOSITION EACH BGO CRYSTAL BAR
>       fgets(line,MAXLINE,fp);   //read blank line
> 
>       for(i=1; i<=5; i++)   //1,3,5,7,9-odd layer
>         {
>           fgets(line,MAXLINE,fp); //BGO LAYER = 1,... BGO LAYER = 9
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
> 
>           while(theno)
>             {
>               int   itemp[5]={0,0,0,0,0};
>               float temp[5]={0.,0.,0.,0.,0.};
> 
>               ReplaceWithBlank(line,'[');
>               ReplaceWithBlank(line,']');
> 
>               if(theno == 1)
>                 sscanf(line,"%d%g",&itemp[0],&temp[0]);
>               else if(theno == 2)
>                 sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>               else if(theno == 3)
>                 sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                        &itemp[2],&temp[2]);
>               else if(theno == 4)
>                 sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                        &itemp[2],&temp[2],&itemp[3],&temp[3]);
>               else if(theno == 5)
>                   sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2],&itemp[3],&temp[3],&itemp[4],&temp[4]);
>               else
>                 printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>               for(j=1; j<=theno; j++)
>                 {
>                   int ix; //BGO layer no(1,3,5,7,9)
>                   int iy; //upper(2) or lower(1)
>                   int iz; //crystal no(1-20)
> 
>                   ix = 2*i-1;
>                   iy = (itemp[j-1]-1)/20 + 1;
>                   iz = itemp[j-1] - (iy-1)*20;
>                   bgo[ix-1][iy-1][iz-1] = temp[j-1];
>                 }
> 
>               fgets(line,MAXLINE,fp);
>               theno = NumberOfChar(line,'[');
>             }
>         }
> 
>       for(i=1; i<=5; i++)   //2,4,6,8,10-even layer
>         {
>           fgets(line,MAXLINE,fp); //BGO LAYER = 2,... BGO LAYER = 10
>           fgets(line,MAXLINE,fp);
>           theno = NumberOfChar(line,'[');
> 
>           while(theno)
>             {
>               int   itemp[5]={0,0,0,0,0};
>               float temp[5]={0.,0.,0.,0.,0.};
> 
>               ReplaceWithBlank(line,'[');
>               ReplaceWithBlank(line,']');
> 
>               if(theno == 1)
>                 sscanf(line,"%d%g",&itemp[0],&temp[0]);
>               else if(theno == 2)
>                 sscanf(line,"%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1]);
>               else if(theno == 3)
>                 sscanf(line,"%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                        &itemp[2],&temp[2]);
>               else if(theno == 4)
>                 sscanf(line,"%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                        &itemp[2],&temp[2],&itemp[3],&temp[3]);
>               else if(theno == 5)
>                 sscanf(line,"%d%g%d%g%d%g%d%g%d%g",&itemp[0],&temp[0],&itemp[1],&temp[1],
>                    &itemp[2],&temp[2],&itemp[3],&temp[3],&itemp[4],&temp[4]);
>               else
>                 printf("Error on Reading Edep in SILICON: theno=%d\n",theno);
> 
>               for(j=1; j<=theno; j++)
>                 {
>                   int ix; //BGO layer no(2,4,6,8,10)
>                   int iy; //upper(2) or lower(1)
>                   int iz; //crystal no(1-20)
> 
>                   ix = 2*i;
>                   iy = (itemp[j-1]-1)/20 + 1;
>                   iz = itemp[j-1] - (iy-1)*20;
>                   bgo[ix-1][iy-1][iz-1] = temp[j-1];
>                 }
> 
>               fgets(line,MAXLINE,fp);
>               theno = NumberOfChar(line,'[');
>             }
>         }
> // total energy deposit in BGO
>       fscanf(fp,"%s%s%g\n",s1,s2,&sum);
>     }
> }



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