]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
dmon showing gbe data rate
authorJan Michel <j.michel@gsi.de>
Thu, 24 Jul 2014 15:58:12 +0000 (17:58 +0200)
committerJan Michel <j.michel@gsi.de>
Thu, 24 Jul 2014 15:58:28 +0000 (17:58 +0200)
dmon/code/Dmon.pm
dmon/example_config.pl
dmon/scripts/dmon_datarate.pl [new file with mode: 0755]
dmon/scripts/dmon_reftime.pl
dmon/scripts/dmon_trgrate.pl

index 8bfd4ce2628f0c08452ab5a918014d9e5299c431..be390570e94c142da6876a20905b8e7f389bb520 100644 (file)
@@ -3,7 +3,7 @@ use POSIX qw/floor ceil strftime/;
 use Data::Dumper;
 use warnings;
 use strict;
-
+use HADES::TrbNet;
 
 
 print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\n";
@@ -15,12 +15,53 @@ print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\
 ###############################################################################
 
 use constant DMONDIR => "/dev/shm/dmon/";
-our $AcceleratorCycle = 7;
-our $CTSAddress = 0x8000;
-
 
 
+###############################################################################
+#  Initializing file handles and TrbNet link
+###############################################################################
+sub StartUp {
+  my %config = do $ARGV[0];
+  $config{flog} = OpenQAFile();
+  trb_init_ports() or die trb_strerror();
+  return %config;
+  }
 
+###############################################################################
+#  Make Rates from register read
+###############################################################################
+my $OldValues; my $firstrun = 1;
+sub MakeRate {
+  my ($pos,$width,$usets,$t) = @_;
+  my $res;
+  
+  foreach my $b (keys $t) {
+    for my $i (0..((scalar @{$t->{$b}{value}})-1)) {
+      my $value    = $t->{$b}{value}[$i]||0;
+         $value    = ($value>>$pos) & (2**$width-1);
+      my $diff     = $value - ($OldValues->{$b}{value}[$i]||0);
+         $diff    += 2**$width if $diff < 0;
+      my $tdiff    = $t->{$b}{time}[$i] - ($OldValues->{$b}{time}[$i]||0);
+         $tdiff   += 2**16 if $tdiff < 0;
+      my $rate     = $diff;
+         $rate     = $diff / (($tdiff*16E-6)||1) if $usets;
+      $res->{$b}{rate}[$i]  = $rate;
+      $res->{$b}{value}[$i] = $value;
+      $res->{$b}{time}[$i]  = $t->{$b}{time}[$i];
+      $res->{$b}{tdiff}[$i] = $tdiff;
+      }
+    }
+  if (!$firstrun) {  
+    $OldValues = $res;  
+    return $res;
+    }
+  else {
+    $OldValues = $res;  
+    $firstrun = 0;
+    return undef;
+    }
+  }
+  
 
 ###############################################################################
 #  Make Title & Footer
index aaf85ae1e868e75afefabbe2cabac70d3a8d6983..5b4823d9328601674021901200132fd083f130f1 100644 (file)
@@ -4,11 +4,12 @@
 #Scripts to start & order of icons in the Overview
 activeScripts => [['time','-','-','-','daqop'],
                   ['numfee','temperature','reftime','-','-'],
-                  ['trgrate','-','-','-','-'],
+                  ['trgrate','datarate','deadtime','-','-'],
+                  ['-','-','-','-','-'],
                   ['-','-','-','-','-'],],
                   
-#Names to be shown in left column of Overview
-qaNames => ['system','main','trigger','-','-','-'],                  
+#Names to be shown in left column of Overview (max 4 letters!)
+qaNames => ['sys','main','rate','-','-','-'],                  
 
 #Expected number of FPGAs in system
 NumberOfFpga => 11,       
diff --git a/dmon/scripts/dmon_datarate.pl b/dmon/scripts/dmon_datarate.pl
new file mode 100755 (executable)
index 0000000..4d73348
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Dmon;
+use Data::Dumper;
+
+
+my %config = Dmon::StartUp();
+
+my $old;
+my $value, my $longtext, my $status;
+
+
+while(1) {
+  my $errors = 0;
+  my $max = 0; my $min = 1E9; my $sum = 0;
+  my $r = trb_register_read(0xff7f,0x83b3);
+  if (defined $old) {
+    foreach my $c (keys %{$r}) {
+      next unless defined $r->{$c};
+      my $s = $r->{$c} - $old->{$c};
+      if ($s < 0) {$s += 2**32;}
+      if ($s > $max) {$max = $s;}
+      if ($s < $min) {$min = $s;}
+      $sum += $s;
+      }
+
+      
+    my $title    = "Data Rate";
+    $value = Dmon::SciNotation($sum)."b/s";
+    
+    my $longtext = "Total Data rate ".Dmon::SciNotation($sum)."b/s<br>Maximum per board: ".Dmon::SciNotation($max)."b/s";
+    $status   = Dmon::OK;
+    Dmon::WriteQALog($config{flog},"datarate",20,$status,$title,$value,$longtext);
+    }
+  $old = $r;  
+  sleep 1;
+  }
index db614837e9ef598353648102f1dd9bee1ad2b285..8cda32bd7760780db780ae76e42e1dd6b150b83e 100755 (executable)
@@ -35,7 +35,7 @@ while(1) {
   my $longtext = "Polarity of the reference time signals on TDCs seems to be: ".$value;
   if($errors && $lasterrors) {  $status   = Dmon::GetQAState('below',$errors,(0,1,4));}
   else                       {  $status   = Dmon::OK;}
-  Dmon::WriteQALog($flog,"reftime",10,$status,$title,$value,$longtext);
+  Dmon::WriteQALog($flog,"reftime",20,$status,$title,$value,$longtext);
   $lasterrors = $errors;
   sleep 10;
   }
index e01e007091e028488b58ec29543c8a482cd4995f..8a564ddd99a1fc5a948257bbdaecf701ee398531 100755 (executable)
@@ -9,13 +9,12 @@ use HADES::TrbNet;
 use Time::HiRes qw(usleep);
 use Dmon;
 use HPlot;
+use Data::Dumper;
 
-my %config = do $ARGV[0];
-my $flog = Dmon::OpenQAFile();
+my %config = Dmon::StartUp();
 
 
-my $old;
-my $summing = 0;
+my $summing = 0; my $timesum = 0;
 my $cnt = 0;
 
 HPlot::PlotInit({
@@ -40,31 +39,27 @@ my $str = Dmon::MakeTitle(10,6,"TriggerRate",0);
 Dmon::WriteFile("TriggerRate",$str);
 
 while(1) {
-  trb_init_ports() or die trb_strerror();
+  my $r = trb_registertime_read($config{CtsAddress},0xa002) ;
+  my $t = Dmon::MakeRate(0,32,1,$r);
 
-  while(1) {
-    my $r = trb_register_read($config{CtsAddress},0xa000);
-    my $value    = $r->{$config{CtsAddress}};
-    my $rate     = ($value||0) - ($old||0);
-      $rate += 2**32 if $rate < 0;
+  if( defined $t) {
+    $summing += $t->{$config{CtsAddress}}{rate}[0];
+    $timesum ++;
     
-    if( defined $old) {
-      $summing += $rate;
-      HPlot::PlotAdd('TriggerRate',$rate*5,0);
-      
-      unless($cnt++ % 10) {
-        my $title    = "Rate";
-        my $value    = $summing/2;
-        my $longtext = $value." triggers pre second";
-        my $status   = Dmon::GetQAState('above',$value,(15,2,1));
-        Dmon::WriteQALog($flog,"trgrate",5,$status,$title,$value,$longtext,'2-TriggerRate');
-  
-        HPlot::PlotDraw('TriggerRate');
-        $summing = 0;
-        }
+    HPlot::PlotAdd('TriggerRate',$t->{$config{CtsAddress}}{rate}[0],0);
+    
+    unless($cnt++ % 10) {
+      my $title    = "Rate";
+      my $value    = int($summing/$timesum);
+      my $longtext = $value." triggers pre second";
+      my $status   = Dmon::GetQAState('above',$value,(15,2,1));
+      Dmon::WriteQALog($config{flog},"trgrate",5,$status,$title,$value,$longtext,'2-TriggerRate');
+
+      HPlot::PlotDraw('TriggerRate');
+      $summing = 0;
+      $timesum = 0;
       }
-    $old = $value;    
-    usleep(200000);
     }
-  sleep 10;
+  usleep(200000);
   }
+