]> jspc29.x-matter.uni-frankfurt.de Git - hadesdaq.git/commitdiff
update hmon scripts for new MDC
authorhadaq <jan@lxhadeb07>
Sat, 21 Sep 2024 17:53:50 +0000 (19:53 +0200)
committerhadaq <jan@lxhadeb07>
Sat, 21 Sep 2024 17:53:50 +0000 (19:53 +0200)
hmon/Hmon.pm
hmon/MDC.pm [new symlink]
hmon/hmon_mdc_temp.pl
hmon/hmon_mdc_voltage.pl
hmon/hmon_mdcnew_missing.pl [new file with mode: 0755]
hmon/hmon_mdcnew_temp.pl [new file with mode: 0755]
hmon/hmon_mdcnew_temperatures.pl [new file with mode: 0755]
hmon/hmon_mdcnew_voltage.pl [new file with mode: 0755]

index 23c953b03c3b3486c2b265646d58fcc7a58a1c4d..7c99b82fa427347c319a3adced2dde9207f762bc 100644 (file)
@@ -290,17 +290,18 @@ sub DrawMDC {
 # Draw Scale
 ###############################################################################
 sub DrawScale {
-  my ($min,$max,$steps) = @_;
+  my ($min,$max,$steps,$lg) = @_;
   my $str;
+  $lg //= 0;
   #    print "$min $max $steps\n";
   return "" if $max == $min;
   $str .= "<table class=\"scale\"><tr>";
-  $str .= sprintf("<td style=\"background-color:%4s;\">",Hmon::findcolor(0,0,$steps,0));
+  $str .= sprintf("<td style=\"background-color:%4s;\">",Hmon::findcolor(0,0,$steps,$lg));
   return $str.="</table>" if $max == $min;
   $str .= sprintf("<td class=\"label\">%#2.3G",$min);
   for (my $i = 1;$i<$steps;$i++) {
     #          my $j = ($max-$min)/$steps*$i;
-    $str .= sprintf("<td style=\"background-color:%4s;\">",Hmon::findcolor($i,0,$steps,0));
+    $str .= sprintf("<td style=\"background-color:%4s;\">",Hmon::findcolor($i,0,$steps,$lg));
   }
   $str .= sprintf("<td class=\"label\">%#2.3G",$max);
   $str .= "</table>\n";
diff --git a/hmon/MDC.pm b/hmon/MDC.pm
new file mode 120000 (symlink)
index 0000000..e71fc0c
--- /dev/null
@@ -0,0 +1 @@
+../../hades_mdc_settings/scripts/MDC.pm
\ No newline at end of file
index 03fdeed37dfea10c40b349649466ba99bd3856b1..98feeade4296e16fac6ac5b6102f0014efd1e0bf 100755 (executable)
@@ -52,8 +52,8 @@ while (1) {
   }
 
   ($min,$max) = Hmon::MakeMinMax3($store, 4, 6, 16);
-  $str[0][4] = Hmon::MakeTitle(9, 10, "MDC Temperatures");
-  for (my $l = 0; $l < 4;$l++) {
+  $str[0][4] = Hmon::MakeTitle(10, 6, "MDC Temperatures");
+  for (my $l = 2; $l < 4;$l++) {
     $str[0][$l] = Hmon::MakeTitle(9, 3, "MDC $l Temperatures");
     $str[1][$l] = "";
     for (my $s = 0; $s < 6;$s++) {
index 64d01650fd7788fc0e9e2bda0cd64ff1d8a7b033..f31d36c48f60d54932ca71369eeb70d0428ffee9 100755 (executable)
@@ -77,12 +77,12 @@ while (1) {
 
   my $cnt = 0;
   foreach my $regs (@$store2) {
-    my $page = Hmon::MakeTitle(9, 10, "MDC Voltages $names[$cnt]");
+    my $page = Hmon::MakeTitle(10, 6, "MDC Voltages $names[$cnt]");
 #     my ($min,$max) = ($fminimum[$cnt],$fmaximum[$cnt]);
 #     my ($min,$max) = Hmon::MakeMinMax3( $regs, 4, 6, 16);
 #     print "$min $max\n";
     my ($color,$raw);
-    for (my $l = 0; $l < 4;$l++) {
+    for (my $l = 2; $l < 4;$l++) {
       $page .= "<p>";
       for (my $s = 0; $s < 6;$s++) {
         for (my $b = 0; $b < 16; $b++) {    
diff --git a/hmon/hmon_mdcnew_missing.pl b/hmon/hmon_mdcnew_missing.pl
new file mode 100755 (executable)
index 0000000..557a3ed
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use POSIX qw(strftime);
+use Time::HiRes qw( gettimeofday usleep time );
+use FileHandle;
+use Data::Dumper;
+use POSIX qw/floor ceil/;
+use Hmon;
+use QA;
+use HADES::TrbNet;
+use lib '.';
+use MDC;
+
+$ENV{DAQOPSERVER} = 'localhost:40';
+
+
+trb_init_ports() or die trb_strerror();
+
+while (1) {
+  my $store;
+  my $boards = trb_register_read(0xfffb,0) or sleep 5 and next;
+#   print Dumper $boards;
+  for (my $l = 0; $l < 2;$l++) {
+    for (my $s = 0; $s < 6;$s++) {
+      for (my $b = 0; $b < 16;$b++) {
+        next unless defined $boards->{MDC::get_address($l,$s,$b,5)};
+        $store->{$l}{$s}{$b} = 0;
+        $store->{$l}{$s}{$b} += 1 unless defined $boards->{MDC::get_address($l,$s,$b,0)};
+        $store->{$l}{$s}{$b} += 2 unless defined $boards->{MDC::get_address($l,$s,$b,1)};
+        next unless MDC::get_address($l,$s,$b,2);
+        $store->{$l}{$s}{$b} += 4 unless defined $boards->{MDC::get_address($l,$s,$b,2)};
+        }
+      }
+    }
+# exit;
+#   $status = $high + $low . " warnings";
+#   my $qastate = QA::GetQAState('below', $high + $low, @QA::MdcVoltageLimits);
+#   QA::WriteQALog($fqa, "mdc", "voltage", 30, $qastate,"Voltages", $status,$msg);
+
+
+  my $cnt = 0;
+  my $page = Hmon::MakeTitle(10, 6, "MDCnew Missing");
+  my ($color,$raw);
+  for (my $l = 0; $l < 2;$l++) {
+    $page .= "<p>";
+    for (my $s = 0; $s < 6;$s++) {
+      for (my $b = 0; $b < 16; $b++) {    
+        $color->{$b} = sprintf("style=\"background:%4s;\"",Hmon::findcolor($store->{$l}->{$s}->{$b}//0,1,8,0));
+        $color->{$b} = "style=\"background:#000;\"" unless defined $store->{$l}->{$s}->{$b};
+        $raw->{$b} = sprintf("%i",$store->{$l}->{$s}->{$b}//"NaN");
+        }
+      $page .= Hmon::DrawMDC($l,$s,$color,$raw);  
+      }
+    }
+  $page .= Hmon::DrawScale(0,7,42);
+  $page .= "<p>Every color apart from grey is some missing FPGA";
+#     $cnt++;
+
+  $page .= Hmon::MakeFooter();
+  Hmon::WriteFile("MDCNewMissing",$page);
+  
+  
+  sleep 10;
+}
diff --git a/hmon/hmon_mdcnew_temp.pl b/hmon/hmon_mdcnew_temp.pl
new file mode 100755 (executable)
index 0000000..ff35c5a
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Time::HiRes qw( gettimeofday usleep time );
+use FileHandle;
+use Data::Dumper;
+use POSIX qw/floor ceil/;
+use List::Util 'max';
+use Perl2Epics;
+use QA;
+
+use Hmon;
+my $flog = Hmon::OpenLogfile();
+my $fqa  = QA::OpenQAFile();
+
+use HADES::TrbNet;
+
+$ENV{DAQOPSERVER} = 'localhost:40';
+
+my @str;
+
+my $store = {};
+my $laststore = {};
+my $values = {};
+my $color = {};
+my $raw = {};
+my $val;
+my $mailerrstatecnt = 0;
+my ($max,$min,$avg,$mean);
+
+trb_init_ports() or die trb_strerror();
+
+Perl2Epics::Connect("TempAlarmEPICS","HAD:MDC:TEMP:TempLV:alarm");
+my $data = Perl2Epics::GetAll();
+
+#print Dumper $data;
+#print $data->{'TempAlarmEPICS'}->{'val'} . "\n";
+#print $mailerrstatecnt . "\n";
+#exit;
+
+while (1) {
+  my $rh_mdc_temp;
+  $rh_mdc_temp = trb_register_read(0xfffb, 0xd48c) or sleep 5 and next;
+
+
+  foreach my $board ( keys %$rh_mdc_temp) {
+    my $id_0 = ($board >> 7)&2 + (($board >> 4)&0xf) / 6;
+    my $id_1 = ($board >> 4&0xf) % 6;
+    my $id_2 = ($board >> 0) & 0x0f;
+    $store->{$id_0}->{$id_1}->{$id_2} =
+      ($rh_mdc_temp->{$board} & 0xffff) / 256;
+   # printf "temp: %x %x  %x\n", $id_0, $id_1, $id_2;
+   # printf "temp: %x\n", $store->{$id_0}->{$id_1}->{$id_2};
+  }
+
+  ($min,$max) = Hmon::MakeMinMax3($store, 4, 6, 16);
+  $str[0][4] = Hmon::MakeTitle(10, 6, "MDC Temperatures");
+  for (my $l = 0; $l < 2;$l++) {
+#     $str[0][$l] = Hmon::MakeTitle(9, 3, "MDC $l Temperatures");
+    $str[1][$l] = "";
+    for (my $s = 0; $s < 6;$s++) {
+      for (my $b = 0; $b < 16; $b++) {
+        $color->{$b} = sprintf("style=\"background:%4s;\"",Hmon::findcolor($store->{$l}->{$s}->{$b},$min,$max,0));
+        $raw->{$b} = sprintf("%.1f",$store->{$l}->{$s}->{$b});
+      }
+      $str[1][$l] .= Hmon::DrawMDC($l,$s,$color,$raw);
+    }
+    #                         Hmon::WriteFile("MDC".$l."Temperature",$str[0][$l].$str[1][$l].$str[2][$l]);
+  }
+  $str[2][0] = Hmon::DrawScale($min,$max,42);
+  $str[2][0] .= Hmon::MakeFooter();
+  Hmon::WriteFile("MDCNewTemperature",$str[0][4]."<p>".$str[1][0]."<p>".$str[1][1]."<p>".$str[2][0]);#."<p>".$str[1][2]."<p>".$str[1][3].$str[2][0]);
+
+#   my @mint; my @maxt;
+#   for (my $i = 0; $i<4; $i++) {
+#     ($mint[$i],$maxt[$i],$avg,$mean) = Hmon::MakeMinMax2(\%{$store->{$i}},6,16,1);
+#     Hmon::WriteLog($flog, "MDC $i Temp","Temperatures, Sector %i: min. %.1f°C - max. %.1f°C - &Oslash; %.1f°C",$i,$min,$max,$avg);
+#   }
+# 
+#   my $qastate = QA::GetQAState('below', max(@maxt), @QA::MdcTempLimits);
+#   my $str = sprintf("%i/%i/%i/%i", $maxt[0], $maxt[1], $maxt[2], $maxt[3]);
+#   QA::WriteQALog($fqa,"mdc","temp", 40, $qastate, "Temperature", $str, 
+#                  "Max. temperature in each plane of MDC are " . $str);
+  $store = {};
+
+
+#   if($qastate >= QA::ERROR || ( $data->{'TempAlarmEPICS'}->{'val'}//0 > 0 )  ) {
+#     if($mailerrstatecnt++ >= 60) {
+#       Hmon::SendEmail('c.wendisch@gsi.de',"Error: MDC Temperature too high","MDC temperatures are too high:  
+# \n$str\n".$data->{'TempAlarmEPICS'}->{'val'});
+#       $mailerrstatecnt = 0;
+#       }
+#     }
+    
+  sleep 20;
+}
diff --git a/hmon/hmon_mdcnew_temperatures.pl b/hmon/hmon_mdcnew_temperatures.pl
new file mode 100755 (executable)
index 0000000..6291213
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use Data::Dumper;
+use Data::TreeDumper;
+use Hmon;
+use QA;
+use HPlot;
+use lib '.';
+use MDC;
+use Time::HiRes qw(usleep time);
+use List::Util qw[min max];
+
+use HADES::TrbNet;
+
+$ENV{DAQOPSERVER} = 'localhost:40';
+trb_init_ports() or die trb_strerror();
+
+
+HPlot::PlotInit({
+  name    => "MDCNewTemps",
+  file    => "files/MDCNewTemps",
+  title   => "Temperatures",
+  entries => 80,
+  curves  => 30,
+  type    => HPlot::TYPE_HEATMAP,
+  output  => HPlot::OUT_PNG,
+  zlabel  => "Hitrate",
+  sizex   => 610,
+  sizey   => 510,
+  nokey   => 1,
+  buffer  => 1,
+  ymin    => 29.5,
+  ymax    => -0.5,
+  xmin    => -0.5,
+  xmax    => 79.5,
+  #cbmax   => "100<*<1E7",
+  #cbmin   => 0,
+  noinit  => 1,
+  additional => "set format y \"%02o\";set ytics (0,5,8,13,16,21,24,29);set xtics('0' 0,'2' 10, '4' 20,'6' 30,'8' 40,'A' 50, 'C' 60, 'E' 70);",
+  showvalues => 0,  }
+  );
+
+
+my $str  = Hmon::MakeTitle(8, 11, "MDC Temperatures",0);
+$str .= qq@<img src="%ADDPNG files/MDCNewTemps.png%" type="image/png"><br>\n@;
+$str .= Hmon::MakeFooter();
+Hmon::WriteFile("MDCNewTemps",$str);  
+  
+  
+while (1) {
+  HPlot::PlotClear('MDCNewTemps');
+  my $mdc_temp;
+  $mdc_temp = trb_register_read(0xfffb, 0) or sleep 5 and next;
+  foreach my $board (keys %$mdc_temp) {
+    my $t = ($mdc_temp->{$board}>>20)/16;
+    my ($p,$s,$b,$e) = MDC::get_position($board);
+    my $xpos = $b*5 + ($e==5?0:$e+1);
+    my $ypos = $p*8+$s;
+    next if $p == -1;
+#     printf("%x %i %i %i %i\n",$board,$p,$s,$b,$e) ;
+    HPlot::PlotFill('MDCNewTemps',$t,$xpos,$ypos);
+    }
+  
+  HPlot::PlotDraw('MDCNewTemps');
+
+  sleep 10;
+  }
+
diff --git a/hmon/hmon_mdcnew_voltage.pl b/hmon/hmon_mdcnew_voltage.pl
new file mode 100755 (executable)
index 0000000..14fd6b0
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use POSIX qw(strftime);
+use Time::HiRes qw( gettimeofday usleep time );
+use FileHandle;
+use Data::Dumper;
+use POSIX qw/floor ceil/;
+use Hmon;
+use QA;
+use HADES::TrbNet;
+
+$ENV{DAQOPSERVER} = 'localhost:40';
+
+my $store = {};
+
+my $msg = "";
+my $low = 0;
+my $high = 0;
+my $status = "";
+
+#for Hmon box
+my @names = qw(1V1in 1V1 3V3in 2V5);
+my @minimum = (1.3, 1.07, 3.5, 2.45);
+my @maximum = (1.8, 1.13, 4.0, 2.55);
+
+#for drawings
+my @fname = qw(1V1in 1V1 3V3in 2V5);
+my @fminimum = (1.1, 1.0, 3.3, 2.4);
+my @fmaximum = (2.5, 1.2, 4.8, 2.6);
+
+
+my $fqa = QA::OpenQAFile();
+my $qastate;
+
+trb_init_ports() or die trb_strerror();
+
+while (1) {
+  my $store2;
+  my $rh_volt = trb_register_read_mem(0xfffb, 0xd488, 0, 4) or sleep 5 and next;
+
+  foreach my $board (sort {$a <=> $b} keys %$rh_volt) {
+    my $reg_address = 0;
+    foreach my $val (@{$rh_volt->{$board}}) {
+      $store->{$reg_address}->{$board} = $val  / 16 ;
+      my $plane = ($board >> 7)&2 + (($board >> 4)&0xf) / 6;
+      $store2->[$reg_address] {$plane} {($board >> 4&0xf) % 6} {($board >> 0) & 0x0f} = $store->{$reg_address}->{$board} / 1000.0 ;
+      
+      $reg_address++;
+      }
+    }
+  
+#   $status = $high + $low . " warnings";
+#   my $qastate = QA::GetQAState('below', $high + $low, @QA::MdcVoltageLimits);
+#   QA::WriteQALog($fqa, "mdc", "voltage", 30, $qastate,"Voltages", $status,$msg);
+
+
+  my $cnt = 0;
+  my $page = Hmon::MakeTitle(9, 18, "MDCnew Voltages");
+  foreach my $regs (@$store2) {
+#     my ($min,$max) = ($fminimum[$cnt],$fmaximum[$cnt]);
+#     my ($min,$max) = Hmon::MakeMinMax3( $regs, 4, 6, 16);
+#     print "$min $max\n";
+    my ($color,$raw);
+    for (my $l = 0; $l < 2;$l++) {
+      $page .= "<p>";
+      for (my $s = 0; $s < 6;$s++) {
+        for (my $b = 0; $b < 16; $b++) {    
+          $color->{$b} = sprintf("style=\"background:%4s;\"",Hmon::findcolorVoltages($regs->{$l}->{$s}->{$b}//0,$fminimum[$cnt],$fmaximum[$cnt],$minimum[$cnt],$maximum[$cnt],0));
+#           $color->{$b} = "style=\"background:#000;\"" unless defined $regs->{$l}->{$s}->{$b};
+          
+          $raw->{$b} = sprintf("%1.2f",$regs->{$l}->{$s}->{$b}//"NaN");
+          }
+        $page .= Hmon::DrawMDC($l,$s,$color,$raw);  
+        }
+      }
+    $page .= Hmon::DrawScaleVoltages($fminimum[$cnt],$fmaximum[$cnt],$minimum[$cnt],$maximum[$cnt],42);
+    $cnt++;
+    }
+
+  $page .= Hmon::MakeFooter();
+  Hmon::WriteFile("MDCNewVoltage",$page);
+  
+  
+  sleep 30;
+}