Subversion Repositories f9daq

Rev

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
#include "zlib.h"
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 5220  // Right edge of SiPM+Lightguide
33
#define OFFSETX 0  // Right edge of SiPM+Lightguide
34
#define OFFSETY 5860 // Lower edge of SiPM+Lightguide
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=0, double tdcCut=5.0)
93
int analysisScan(char* dfile0="test", double c_tdcOffset=97, double tdcCut=5.0, int dbg=0)
92
{
94
{
93
 
95
 
94
  const double c_tdcOffset = +97*TDC_BIN; // ns, SiPM4    
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
          dfp=gzopen(dfile,"rb");
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
                if(gzeof(dfp)) end_of_file = 1;        
224
                //if(gzeof(dfp)) end_of_file = 1;       
-
 
225
                if(feof(dfp)) end_of_file = 1;
223
 
226
               
224
                gzread(dfp, (voidp)&readbuf, 2*ulsize);
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(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize));
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(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize));
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(dfp, (voidp)&readbuf[2], ulsize); // last field of event record
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(dfp, (voidp)&buf, nb);
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
                if (dbg) printf("%d 0x%03x Len=%d\n",evtrec->nev,recid,len);
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
                                  if (recid==0x140 || recid==0x141) {
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 = gzread(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize));
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(dfp, (voidp)&readbuf[2], (rec_len-2*ulsize));
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
        if(dfp) gzclose(dfp);
465
        //if(dfp) gzclose(dfp);
-
 
466
                if(dfp) fclose(dfp);
456
               
467
               
457
        dfp=gzopen(dfile,"rb");
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(dfp);
493
          //gzclose(dfp);
-
 
494
          fclose(dfp);
482
          delete dfp;
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
                delete rootfile;
503
                //delete rootfile;
491
        }              
504
        }              
492
       
505
       
493
        return 1;
506
        return 1;
494
}
507
}
495
 
508