Rev 50 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 50 | Rev 90 | ||
|---|---|---|---|
| Line 15... | Line 15... | ||
| 15 | #include "TF1.h" | 
            15 | #include "TF1.h" | 
          
| 16 | #include "TMath.h" | 
            16 | #include "TMath.h" | 
          
| 17 | #include "TStyle.h" | 
            17 | #include "TStyle.h" | 
          
| 18 | #include "TCanvas.h" | 
            18 | #include "TCanvas.h" | 
          
| 19 | #include "TLine.h" | 
            19 | #include "TLine.h" | 
          
| 20 | 
  | 
            20 | //#include "zlib.h" | 
          
| 21 | 21 | ||
| 22 | // ------------------------------------------------------------------------------ | 
            22 | // ------------------------------------------------------------------------------ | 
          
| 23 | 23 | ||
| 24 | #define POSMARG 1000 | 
            24 | #define POSMARG 1000 | 
          
| 25 | 25 | ||
| Line 28... | Line 28... | ||
| 28 | // data format | 
            28 | // data format | 
          
| 29 | #define MAXDATA 16 | 
            29 | #define MAXDATA 16 | 
          
| 30 | #define NCH 64 | 
            30 | #define NCH 64 | 
          
| 31 | #define TDC_BIN 1.0416 // 1 TDC bin in ns | 
            31 | #define TDC_BIN 1.0416 // 1 TDC bin in ns | 
          
| 32 | #define MIKRO_BIN 0.49609/1000. //1 mikro step in mm; stage MM3MF | 
            32 | #define MIKRO_BIN 0.49609/1000. //1 mikro step in mm; stage MM3MF | 
          
| 33 | #define OFFSETX  | 
            33 | #define OFFSETX 0  // Right edge of SiPM+Lightguide | 
          
| 34 | #define OFFSETY  | 
            34 | #define OFFSETY 0 // Lower edge of SiPM+Lightguide | 
          
| 35 | 35 | ||
| 36 | #define RUNREC_ID 1 | 
            36 | #define RUNREC_ID 1 | 
          
| 37 | #define ENDREC_ID 2 | 
            37 | #define ENDREC_ID 2 | 
          
| 38 | #define POSREC_ID 3 | 
            38 | #define POSREC_ID 3 | 
          
| 39 | #define EVTREC_ID 4 | 
            39 | #define EVTREC_ID 4 | 
          
| Line 82... | Line 82... | ||
| 82 | THRREC *thrrec;  | 
            82 | THRREC *thrrec;  | 
          
| 83 | THRREC thr; | 
            83 | THRREC thr; | 
          
| 84 | 84 | ||
| 85 | double padCenter[NCH][2];  | 
            85 | double padCenter[NCH][2];  | 
          
| 86 | 86 | ||
| - | 87 | // Test if the hit(x,y) lies inside the coordinates of the channel | 
          |
| - | 88 | // file with pad centers (without offset) should be provided | 
          |
| 87 | int position(int, int, int);  | 
            89 | int position(int, int, int);  | 
          
| 88 | 90 | ||
| 89 | // ------------------------------------------------------------------------------ | 
            91 | // ------------------------------------------------------------------------------ | 
          
| 90 | 92 | ||
| 91 | int analysisScan(char* dfile0="test", int dbg=  | 
            93 | int analysisScan(char* dfile0="test", double c_tdcOffset=97, double tdcCut=5.0, int dbg=0)  | 
          
| 92 | { | 
            94 | { | 
          
| 93 | 95 | ||
| 94 | 
  | 
            96 |   //const double c_tdcOffset = +98*TDC_BIN; // ns | 
          
| - | 97 | c_tdcOffset *= TDC_BIN; //ns  | 
          |
| - | 98 | ||
| 95 | printf(" Data to root conversion program\nUsage:\nd2r(input file name <without .dat>, debug on/off, TDC cut +-[ns])\n\n");  | 
            99 | printf(" Data to root conversion program\nUsage:\nd2r(input file name <without .dat>, debug on/off, TDC cut +-[ns])\n\n");  | 
          
| 96 | printf(" OFFSETS: \n x: %d\n y: %d\n t:%f\n", OFFSETX, OFFSETY, c_tdcOffset);  | 
            100 | printf(" OFFSETS: \n x: %d\n y: %d\n t:%f\n", OFFSETX, OFFSETY, c_tdcOffset);  | 
          
| 97 | 101 | ||
| 98 | char fullname[256];  | 
            102 | char fullname[256];  | 
          
| 99 | char sbuff[256];  | 
            103 | char sbuff[256];  | 
          
| Line 149... | Line 153... | ||
| 149 | /*    } | 
            153 | /*    } | 
          
| 150 |     fclose(fp); | 
            154 |     fclose(fp); | 
          
| 151 |   }*/ | 
            155 |   }*/ | 
          
| 152 |   //for(int i=0; i<NCH; i++) printf("%.2lf %.2lf %.2lf\n", corpar[i][0], corpar[i][1], corpar[i][2]); | 
            156 |   //for(int i=0; i<NCH; i++) printf("%.2lf %.2lf %.2lf\n", corpar[i][0], corpar[i][1], corpar[i][2]); | 
          
| 153 | 157 | ||
| 154 | 158 | ||
| 155 |         //histograms | 
            159 |         //histograms | 
          
| 156 | char hname[256];  | 
            160 | char hname[256];  | 
          
| 157 |         //double tdc; | 
            161 |         //double tdc; | 
          
| 158 | TH2F *htdc;  | 
            162 | TH2F *htdc;  | 
          
| 159 | TH2F* h_correctedTDC;  | 
            163 | TH2F* h_correctedTDC;  | 
          
| 160 | TH1F *hnhitsx[NCH], *hnhitsy[NCH];  | 
            164 | TH1F *hnhitsx[NCH], *hnhitsy[NCH];  | 
          
| 161 | TH2F *h2d[NCH];  | 
            165 | TH2F *h2d[NCH];  | 
          
| 162 | 166 | ||
| 163 | TNtuple *nt;  | 
            167 | TNtuple *nt;  | 
          
| 164 | 168 | ||
| 165 |         //data buffer | 
            169 |         //data buffer | 
          
| 166 | unsigned int readbuf[READBUFFERLENGTH];  | 
            170 | unsigned int readbuf[READBUFFERLENGTH];  | 
          
| 167 | unsigned int buf[READBUFFERLENGTH];  | 
            171 | unsigned int buf[READBUFFERLENGTH];  | 
          
| 168 | - | ||
| 169 | - | ||
| 170 | - | ||
| 171 | - | ||
| 172 | 172 | ||
| 173 |         //data file | 
            173 |         //data file | 
          
| 174 | gzFile dfp  | 
            174 |         //gzFile dfp; | 
          
| - | 175 | FILE *dfp;  | 
          |
| 175 | char dfile[256];  | 
            176 | char dfile[256];  | 
          
| 176 | int ftype=0;  | 
            177 | int ftype=0;  | 
          
| 177 | int fcount=1;  | 
            178 | int fcount=1;  | 
          
| 178 | do {  | 
            179 | do {  | 
          
| 179 | switch(ftype++) {  | 
            180 | switch(ftype++) {  | 
          
| Line 188... | Line 189... | ||
| 188 | break;  | 
            189 | break;  | 
          
| 189 | default:  | 
            190 | default:  | 
          
| 190 | printf(" Cannot find data file for %s !!!\n", dfile0);  | 
            191 | printf(" Cannot find data file for %s !!!\n", dfile0);  | 
          
| 191 | return -1;  | 
            192 | return -1;  | 
          
| 192 |           } | 
            193 |           } | 
          
| 193 | 
  | 
            194 |           //dfp=gzopen(dfile,"rb"); | 
          
| - | 195 | dfp=fopen(dfile,"rb");  | 
          |
| 194 | } while(!dfp);  | 
            196 | } while(!dfp);  | 
          
| 195 | printf("Opened data file %s\n", dfile);  | 
            197 | printf("Opened data file %s\n", dfile);  | 
          
| 196 | 198 | ||
| 197 |         //opens ROOT file | 
            199 |         //opens ROOT file | 
          
| 198 |         //TFile *rootfile;  | 
            200 |         //TFile *rootfile;  | 
          
| Line 217... | Line 219... | ||
| 217 | int nint;  | 
            219 | int nint;  | 
          
| 218 | int nb;  | 
            220 | int nb;  | 
          
| 219 | int status;  | 
            221 | int status;  | 
          
| 220 | 222 | ||
| 221 | while(1) {  | 
            223 | while(1) {  | 
          
| 222 | 
  | 
            224 |                 //if(gzeof(dfp)) end_of_file = 1;        | 
          
| - | 225 | if(feof(dfp)) end_of_file = 1;  | 
          |
| 223 | 226 | ||
| 224 | gzread  | 
            227 |                 //gzread(dfp, (voidp)&readbuf, 2*ulsize); | 
          
| - | 228 | fread((void*)&readbuf, 2*ulsize, 1, dfp);  | 
          |
| 225 | rec_id=readbuf[0];  | 
            229 | rec_id=readbuf[0];  | 
          
| 226 | rec_len=readbuf[1];  | 
            230 | rec_len=readbuf[1];  | 
          
| 227 | 231 | ||
| 228 | 232 | ||
| 229 | if(dbg) printf("-----------------------------------------------\n");  | 
            233 | if(dbg) printf("-----------------------------------------------\n");  | 
          
| 230 | if(dbg) printf("[%d] rec_id = %d | rec_len = %u\n", ceve, rec_id, rec_len);  | 
            234 | if(dbg) printf("[%d] rec_id = %d | rec_len = %u\n", ceve, rec_id, rec_len);  | 
          
| 231 | 235 | ||
| 232 | switch(rec_id)  | 
            236 | switch(rec_id)  | 
          
| 233 |                 {               | 
            237 |                 {               | 
          
| 234 | case RUNREC_ID:  | 
            238 | case RUNREC_ID:  | 
          
| 235 | gzread  | 
            239 |                                 //gzread(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize)); | 
          
| - | 240 | fread((void*)&readbuf[2], (rec_len-2*ulsize), 1, dfp);  | 
          |
| 236 | runrec = (RUNREC*) readbuf;  | 
            241 | runrec = (RUNREC*) readbuf;  | 
          
| 237 | run = *runrec;  | 
            242 | run = *runrec;  | 
          
| 238 | 243 | ||
| 239 | if(dbg) {  | 
            244 | if(dbg) {  | 
          
| 240 | printf("RUNREC_ID\n");  | 
            245 | printf("RUNREC_ID\n");  | 
          
| Line 296... | Line 301... | ||
| 296 |                                 } | 
            301 |                                 } | 
          
| 297 | 302 | ||
| 298 | break;  | 
            303 | break;  | 
          
| 299 | 304 | ||
| 300 | case POSREC_ID:  | 
            305 | case POSREC_ID:  | 
          
| 301 | gzread  | 
            306 |                                 //gzread(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize)); | 
          
| - | 307 | fread((void*)&readbuf[2], (rec_len-2*ulsize), 1, dfp);  | 
          |
| 302 | posrec = (POSREC *) readbuf;  | 
            308 | posrec = (POSREC *) readbuf;  | 
          
| 303 | pos=*posrec;  | 
            309 | pos=*posrec;  | 
          
| 304 | 310 | ||
| 305 | if(dbg) {  | 
            311 | if(dbg) {  | 
          
| 306 | printf("POSREC_ID\n");  | 
            312 | printf("POSREC_ID\n");  | 
          
| Line 310... | Line 316... | ||
| 310 | } else printf(" [%d,%d] %d, %d\n", pos.ix, pos.iy, pos.xset, pos.yset);  | 
            316 | } else printf(" [%d,%d] %d, %d\n", pos.ix, pos.iy, pos.xset, pos.yset);  | 
          
| 311 | 317 | ||
| 312 | break;  | 
            318 | break;  | 
          
| 313 | 319 | ||
| 314 | case EVTREC_ID:  | 
            320 | case EVTREC_ID:  | 
          
| 315 | gzread  | 
            321 |                           //gzread(dfp, (voidp)&readbuf[2], ulsize); // last field of event record | 
          
| - | 322 | fread((void*)&readbuf[2], ulsize, 1, dfp);  | 
          |
| 316 | evtrec = (EVTREC *) readbuf;  | 
            323 | evtrec = (EVTREC *) readbuf;  | 
          
| 317 |                           //evtrec->nev = buf[0]; | 
            324 |                           //evtrec->nev = buf[0]; | 
          
| 318 |                           //if (rec_len < 0 || rec_len > 10000) { | 
            325 |                           //if (rec_len < 0 || rec_len > 10000) { | 
          
| 319 | if (rec_len > READBUFFERLENGTH) {  | 
            326 | if (rec_len > READBUFFERLENGTH) {  | 
          
| 320 | printf("Len %u\n", rec_len);  | 
            327 | printf("Len %u\n", rec_len);  | 
          
| 321 | return(0);  | 
            328 | return(0);  | 
          
| 322 |                             } | 
            329 |                             } | 
          
| 323 | nb = rec_len - 3*ulsize; // no. of bytes to read  | 
            330 | nb = rec_len - 3*ulsize; // no. of bytes to read  | 
          
| 324 | gzread  | 
            331 |                                 //gzread(dfp, (voidp)&buf, nb); | 
          
| - | 332 | fread((void*)&buf, nb, 1, dfp);  | 
          |
| 325 | 333 | ||
| 326 | if(dbg) {  | 
            334 | if(dbg) {  | 
          
| 327 | printf("EVTREC_ID\n");  | 
            335 | printf("EVTREC_ID\n");  | 
          
| 328 | printf("id = %d, len = %d, nev = %d\n", evtrec->id, evtrec->len, evtrec->nev);  | 
            336 | printf("id = %d, len = %d, nev = %d\n", evtrec->id, evtrec->len, evtrec->nev);  | 
          
| 329 |                                         //for(int datai = 0; datai < NCH; datai++) printf("%u ", evtrec->data[datai]); | 
            337 |                                         //for(int datai = 0; datai < NCH; datai++) printf("%u ", evtrec->data[datai]); | 
          
| Line 340... | Line 348... | ||
| 340 | int recid = buf[ii++];  | 
            348 | int recid = buf[ii++];  | 
          
| 341 | int len = buf[ii++];  | 
            349 | int len = buf[ii++];  | 
          
| 342 | if (dbg) printf("Buffer pointer %d\n", ii);  | 
            350 | if (dbg) printf("Buffer pointer %d\n", ii);  | 
          
| 343 | unsigned int *dbuf = (unsigned int *)&buf[ii];  | 
            351 | unsigned int *dbuf = (unsigned int *)&buf[ii];  | 
          
| 344 |           //if (n%1000==0)  | 
            352 |           //if (n%1000==0)  | 
          
| 345 | 
  | 
            353 | if (dbg) printf("%d 0x%03x Len=%d\n",evtrec->nev,recid,len);  | 
          
| 346 |           //unsigned short edge; | 
            354 |           //unsigned short edge; | 
          
| 347 |           //int nhits; | 
            355 |           //int nhits; | 
          
| 348 | 
  | 
            356 | if (recid==0x140 || recid==0x141) {  | 
          
| 349 | for (int i=0; i<len; i++) {  | 
            357 | for (int i=0; i<len; i++) {  | 
          
| 350 | int data = dbuf[i] & 0xFFFF ;  | 
            358 | int data = dbuf[i] & 0xFFFF ;  | 
          
| 351 | int edge_type = (dbuf[i]>>16)&0x1 ;  | 
            359 | int edge_type = (dbuf[i]>>16)&0x1 ;  | 
          
| 352 | int overflow = (dbuf[i]>>17)&0x1 ;  | 
            360 | int overflow = (dbuf[i]>>17)&0x1 ;  | 
          
| 353 | int tdc_num = (dbuf[i]>>25)&0x1 ;  | 
            361 | int tdc_num = (dbuf[i]>>25)&0x1 ;  | 
          
| Line 421... | Line 429... | ||
| 421 |           }   | 
            429 |           }   | 
          
| 422 |         } */ | 
            430 |         } */ | 
          
| 423 | break;  | 
            431 | break;  | 
          
| 424 | 432 | ||
| 425 | case THRREC_ID:  | 
            433 | case THRREC_ID:  | 
          
| 426 | status  | 
            434 |                     //status = gzread(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize)); | 
          
| - | 435 | status = fread((void*)&readbuf[2], (rec_len-2*ulsize), 1, dfp);  | 
          |
| 427 | thrrec = (THRREC*) readbuf;  | 
            436 | thrrec = (THRREC*) readbuf;  | 
          
| 428 | thr = *thrrec;  | 
            437 | thr = *thrrec;  | 
          
| 429 | if (dbg) printf("THRREC id = %d len = %d threshold %d\n",  | 
            438 | if (dbg) printf("THRREC id = %d len = %d threshold %d\n",  | 
          
| 430 | thrrec->id, thrrec->len, thrrec->threshold);  | 
            439 | thrrec->id, thrrec->len, thrrec->threshold);  | 
          
| 431 | break;  | 
            440 | break;  | 
          
| 432 | 441 | ||
| 433 | case ENDREC_ID:  | 
            442 | case ENDREC_ID:  | 
          
| 434 | gzread  | 
            443 |                                 //gzread(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize)); | 
          
| - | 444 | fread((void*)&readbuf[2], (rec_len-2*ulsize), 1, dfp);  | 
          |
| 435 | endrec = (ENDREC *) readbuf;  | 
            445 | endrec = (ENDREC *) readbuf;  | 
          
| 436 | 446 | ||
| 437 | if(dbg) {  | 
            447 | if(dbg) {  | 
          
| 438 | printf("ENDREC_ID\n");  | 
            448 | printf("ENDREC_ID\n");  | 
          
| 439 | printf("id = %d, len = %d, time = %d\n", endrec->id, endrec->len, endrec->time);  | 
            449 | printf("id = %d, len = %d, time = %d\n", endrec->id, endrec->len, endrec->time);  | 
          
| Line 450... | Line 460... | ||
| 450 | case 2:  | 
            460 | case 2:  | 
          
| 451 | sprintf(dfile, "./data/%s_file%02d.gz", dfile0, fcount);  | 
            461 | sprintf(dfile, "./data/%s_file%02d.gz", dfile0, fcount);  | 
          
| 452 | break;  | 
            462 | break;  | 
          
| 453 |           } | 
            463 |           } | 
          
| 454 | 464 | ||
| 455 | 
  | 
            465 |         //if(dfp) gzclose(dfp); | 
          
| - | 466 | if(dfp) fclose(dfp);  | 
          |
| 456 | 467 | ||
| 457 | 
  | 
            468 |         //dfp=gzopen(dfile,"rb"); | 
          
| - | 469 | dfp=fopen(dfile,"rb");  | 
          |
| 458 | if(!dfp) {  | 
            470 | if(!dfp) {  | 
          
| 459 | printf(" Cannot open data file: %s ---> Exiting\n", dfile);  | 
            471 | printf(" Cannot open data file: %s ---> Exiting\n", dfile);  | 
          
| 460 | end_of_file = 1;  | 
            472 | end_of_file = 1;  | 
          
| 461 | } else {  | 
            473 | } else {  | 
          
| 462 | printf(" Opened data file: %s\n", dfile);  | 
            474 | printf(" Opened data file: %s\n", dfile);  | 
          
| Line 476... | Line 488... | ||
| 476 |                 //if(dbg) if( ceve>dbg ) break; | 
            488 |                 //if(dbg) if( ceve>dbg ) break; | 
          
| 477 | if(end_of_file) break;  | 
            489 | if(end_of_file) break;  | 
          
| 478 |         } | 
            490 |         } | 
          
| 479 | 491 | ||
| 480 | if(dfp) {  | 
            492 | if(dfp) {  | 
          
| 481 | gzclose  | 
            493 |           //gzclose(dfp); | 
          
| - | 494 | fclose(dfp);  | 
          |
| 482 | 
  | 
            495 |           //delete dfp; | 
          
| 483 |         } | 
            496 |         } | 
          
| 484 | if(dbg) return 1;  | 
            497 | if(dbg) return 1;  | 
          
| 485 | if(rootfile) {  | 
            498 | if(rootfile) {  | 
          
| 486 | nt->Write();  | 
            499 | nt->Write();  | 
          
| 487 | rootfile->Write();  | 
            500 | rootfile->Write();  | 
          
| 488 | printf("Saved to %s\n", fnameroot);  | 
            501 | printf("Saved to %s\n", fnameroot);  | 
          
| 489 | rootfile->Close();  | 
            502 | rootfile->Close();  | 
          
| 490 | 
  | 
            503 |                 //delete rootfile; | 
          
| 491 |         }               | 
            504 |         }               | 
          
| 492 | 505 | ||
| 493 | return 1;  | 
            506 | return 1;  | 
          
| 494 | } | 
            507 | } | 
          
| 495 | 508 | ||