use Data::Dumper;
use warnings;
use strict;
-
+use HADES::TrbNet;
print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\n";
###############################################################################
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
#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,
--- /dev/null
+#!/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;
+ }
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;
}
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({
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);
}
+