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