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