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 *** 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