Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | f9daq | 1 | #include <stdio.h> |
2 | #include "TH2F.h" |
||
3 | #include "TCanvas.h" |
||
4 | #include "TMath.h" |
||
5 | #include "TStyle.h" |
||
6 | #include "TColor.h" |
||
7 | |||
8 | void mypalette(){ |
||
9 | |||
10 | Int_t MyPalette[1000]; |
||
11 | double stops[] = {0.00, 0.34, 0.61, 0.84, 1.00}; |
||
12 | double red[] = {1.00, 0.84, 0.61, 0.34, 0.00}; |
||
13 | double green[] = {1.00, 0.84, 0.61, 0.34, 0.00}; |
||
14 | double blue[] = {1.00, 0.84, 0.61, 0.34, 0.00}; |
||
15 | |||
16 | |||
17 | Int_t gs = TColor::CreateGradientColorTable(5, stops, red, green, blue, 999); |
||
18 | //for (int i=0;i<999;i++) MyPalette[i] = gs+998-i; |
||
19 | |||
20 | for (int i=0;i<999;i++) MyPalette[i] = gs+i; |
||
21 | gStyle->SetPalette(999, MyPalette); |
||
22 | } |
||
23 | |||
24 | int imageread(char *fname,int nchx=28, int nchy=56, int nchz=0, int format=0, int size=0, char *opt=""){ |
||
25 | FILE *fp= fopen(fname,"read"); |
||
26 | const int maxbuf=360000; |
||
27 | float *fbuf= new float[maxbuf]; |
||
28 | unsigned short*ibuf=((unsigned short*) &fbuf[0]); |
||
29 | if (size==0) { |
||
30 | if (format) size=sizeof(float); |
||
31 | else size=sizeof(unsigned short); |
||
32 | } |
||
33 | int ncount=0; |
||
34 | |||
35 | if(fp){ |
||
36 | |||
37 | gStyle->SetPalette(100); |
||
38 | mypalette(); |
||
39 | TCanvas *c=new TCanvas("c","c",1500,1500); |
||
40 | int sizx=sqrt(nchz); |
||
41 | c->Divide(sizx,TMath::Ceil(nchz/double(sizx)) ); |
||
42 | char hname[128]; |
||
43 | |||
44 | while (!feof(fp)){ |
||
45 | |||
46 | |||
47 | int nb=fread(fbuf,size,nchx*nchy,fp); |
||
48 | printf("nb=%d\n",nb); |
||
49 | if (nb>0){ |
||
50 | sprintf(hname,"slice %d",ncount); |
||
51 | TH2F *h=new TH2F("h",hname,nchx,-0.5,nchx-0.5,nchy,-0.5,nchy-0.5); |
||
52 | float val=0; |
||
53 | for (int i=0 ; i<nb;i++){ |
||
54 | //h->SetBinContent(i%nchx+1, i/nchx+1, fbuf[i]); |
||
55 | if (format) val=fbuf[i]; else val=float(ibuf[i]); |
||
56 | h->SetBinContent(i/nchy+1,i%nchy+1, val); |
||
57 | } |
||
58 | c->cd(ncount+1); |
||
59 | h->SetMinimum(0); |
||
60 | h->Draw(opt); |
||
61 | } |
||
62 | |||
63 | ncount++; |
||
64 | } |
||
65 | fclose(fp); |
||
66 | c->Modified(); |
||
67 | c->Update(); |
||
68 | } |
||
69 | |||
70 | delete fbuf; |
||
71 | return 0; |
||
72 | } |
||
73 | |||
74 | int interfileread(char *fname, char *opt=""){ |
||
75 | FILE *fp=fopen(fname,"r"); |
||
76 | if (!fp) { |
||
77 | printf("Cannot open %s\n",fname); |
||
78 | return 0; |
||
79 | } |
||
80 | int j=0; |
||
81 | int ndim=400; |
||
82 | char *line= new char[ndim]; |
||
83 | int indx[4]={-1,-1,-1,-1}; |
||
84 | int dim[5]; |
||
85 | char *cmd,*val,*token; |
||
86 | char fimage[100]; |
||
87 | while (fgets(line,ndim,fp)!=NULL) { |
||
88 | char *v= strstr(line,":="); |
||
89 | if (v!=NULL) { |
||
90 | cmd=line; |
||
91 | v[0]=0; |
||
92 | val = &v[2]; |
||
93 | val[strlen(val)-1]=0; |
||
94 | printf("%d #%s# %s\n",j++, val, cmd); |
||
95 | int axis=-1; |
||
96 | if (strstr(cmd,"matrix axis label")!= NULL){ |
||
97 | |||
98 | sscanf(cmd,"matrix axis label [%d]", &axis); |
||
99 | if(axis>0 && axis<5){ |
||
100 | if (strstr(val," x")!= NULL) indx[axis-1]=1; |
||
101 | if (strstr(val," y")!= NULL) indx[axis-1]=0; |
||
102 | if (strstr(val," z")!= NULL) indx[axis-1]=3; |
||
103 | |||
104 | if (strstr(val,"view") != NULL) indx[axis-1]=0; |
||
105 | if (strstr(val,"tangential")!= NULL) indx[axis-1]=1; |
||
106 | if (strstr(val,"segment") != NULL) indx[axis-1]=2; |
||
107 | if (strstr(val,"axial") != NULL) indx[axis-1]=3; |
||
108 | printf("-->> %s axis=%d indx=%d\n",val, axis,indx[axis-1]); |
||
109 | |||
110 | } |
||
111 | } |
||
112 | if (strstr(cmd,"!matrix size")!= NULL){ |
||
113 | sscanf(cmd,"!matrix size [%d]", &axis); |
||
114 | if(axis>0 && axis<5){ |
||
115 | if (indx[axis-1]<3){ dim[indx[axis-1]]=atoi(val);} |
||
116 | else { |
||
117 | int sum=0; |
||
118 | token = strtok(val,"{,"); |
||
119 | sum+=atoi(token); |
||
120 | while ( (token=strtok(NULL,"{,")) ) sum+=atoi(token); |
||
121 | printf("total dim=%d\n",sum); |
||
122 | dim[3]=sum; |
||
123 | }; |
||
124 | } |
||
125 | printf("axis=%d indx=%d\n",axis,indx[axis-1]); |
||
126 | } |
||
127 | if (strstr(cmd,"name of data file")!= NULL){ |
||
128 | sscanf(val,"%s",fimage); |
||
129 | printf("image file=%s\n",fimage); |
||
130 | } |
||
131 | if (strstr(cmd,"!number of bytes per pixel")!= NULL){ |
||
132 | dim[4]=atoi(val); |
||
133 | printf("bytes per pixel=%d\n",dim[4]); |
||
134 | } |
||
135 | if (strstr(cmd,"!number format")!= NULL){ |
||
136 | if (strstr(val,"float")!=NULL){ dim[5]=1; }; |
||
137 | if (strstr(val,"integer")!=NULL){ dim[5]=0; }; |
||
138 | printf("number format=%d\n",dim[5]); |
||
139 | } |
||
140 | |||
141 | } |
||
142 | } |
||
143 | for (int i=0;i<6;i++) printf ("dim[%d]=%d\n", i,dim[i]); |
||
144 | fclose(fp); |
||
145 | imageread(fimage,dim[0], dim[1], dim[3], dim[5], dim[4], opt); |
||
146 | return 0; |
||
147 | } |
||
148 | |||
149 | |||
150 | int sinoread(char *fname, char *opt=""){ |
||
151 | return interfileread(fname,opt); |
||
152 | } |