Re: I don't understand the ERROR message ?

Rene Brun (Rene.Brun@cern.ch)
Wed, 25 Feb 1998 12:07:00 +0100


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);
> }
> }