@@ -53,6 +53,10 @@ int usage(const char *errstr = nullptr)
5353 printf (" -tdc id - printout raw data as TDC subsubevent (default none)\n " );
5454 printf (" -trignumdump - print only trigger nummers from events or TU (default off)\n " );
5555 print_tdc_arguments ();
56+ printf (" -fine-min5 value - minimal fine counter value of TDC v5, used for liner time calibration (default %u)\n " , (unsigned ) Tdc5FineMin);
57+ printf (" -fine-max5 value - maximal fine counter value of TDC v5, used for liner time calibration (default %u)\n " , (unsigned ) Tdc5FineMax);
58+ printf (" -mhz5 value - running frequency of TDC v5 (default %5.1f)\n " , (double ) Tdc5FreqMhz);
59+
5660 return errstr ? 1 : 0 ;
5761}
5862
@@ -65,6 +69,8 @@ struct TuStat {
6569};
6670
6771bool printraw = false , printsub = false , showrate = false , reconnect = false , dostat = false , dominsz = false , domaxsz = false , autoid = false ;
72+ double mhz5 = Tdc5FreqMhz, coarse_tmlen5 = 1000 . / Tdc5FreqMhz;
73+ unsigned fine_min5 = Tdc5FineMin, fine_max5 = Tdc5FineMax;
6874unsigned idrange = 0xff , onlynew = 0 , onlyraw = 0 , hubmask = 0 , fullid = 0 , adcmask = 0 , onlymonitor = 0 ;
6975int buffer_size = 4 , dotriggerdump = 0 ;
7076
@@ -128,18 +134,16 @@ void print_tu(dogma::DogmaTu *tu, const char *prefix = "")
128134 int pktlen = (int ) tu->GetTdc5PaketLength ();
129135 tdc5_parse_header (&h, &it, buf, pktlen);
130136
131- double coarse_tmlen = 1000 . / Tdc5FreqMhz; // time in nanoseconds
132- const int Tdc5FineMin = 19 , Tdc5FineMax = 392 ;
133137 double last_rising_tm = 0 .;
134138 int last_rising_ch = -1 ;
135- printf (" %s Trigger time: %12.9fs\n " , prefix, h.trig_time * coarse_tmlen * 1e-9 ); // time in seconds
139+ printf (" %s Trigger time: %12.9fs\n " , prefix, h.trig_time * coarse_tmlen5 * 1e-9 ); // time in seconds
136140 while (tdc5_parse_next (&tm, &it, buf, pktlen) == 1 ) {
137141 int fine = tm.fine ;
138- if (fine < Tdc5FineMin )
139- fine = Tdc5FineMin ;
140- else if (fine > Tdc5FineMax )
141- fine = Tdc5FineMax ;
142- double fulltm = -coarse_tmlen * (tm.coarse + (0 . + tm. fine - Tdc5FineMin ) / (0 . + Tdc5FineMax - Tdc5FineMin ));
142+ if (fine < fine_min5 )
143+ fine = fine_min5 ;
144+ else if (fine > fine_max5 )
145+ fine = fine_max5 ;
146+ double fulltm = -coarse_tmlen5 * (tm.coarse + (0 . + fine - fine_min5 ) / (0 . + fine_max5 - fine_min5 ));
143147 printf (" %s ch:%02u falling:%1d coarse:%04u fine:%03u fulltm:%7.3f" ,
144148 prefix, (unsigned ) tm.channel , tm.is_falling ,
145149 (unsigned ) tm.coarse , (unsigned ) tm.fine , fulltm);
@@ -283,6 +287,14 @@ int main(int argc, char* argv[])
283287 } else if ((strcmp (argv[n], " -tdc" ) == 0 ) && (n + 1 < argc)) {
284288 dabc::str_to_uint (argv[++n], &tdcmask);
285289 tdcs.emplace_back (tdcmask);
290+ } else if ((strcmp (argv[n], " -mhz5" ) == 0 ) && (n + 1 < argc)) {
291+ double mhz5 = 300 .;
292+ dabc::str_to_double (argv[++n], &mhz5);
293+ coarse_tmlen5 = 1000 . / mhz5;
294+ } else if ((strcmp (argv[n], " -fine-min5" ) == 0 ) && (n + 1 < argc)) {
295+ dabc::str_to_uint (argv[++n], &fine_min5);
296+ } else if ((strcmp (argv[n], " -fine-max5" ) == 0 ) && (n + 1 < argc)) {
297+ dabc::str_to_uint (argv[++n], &fine_max5);
286298 } else if (!scan_tdc_arguments (n, argc, argv))
287299 return usage (" Unknown option" );
288300 }
0 commit comments