From: hadaq Date: Sat, 21 Sep 2024 17:53:50 +0000 (+0200) Subject: update hmon scripts for new MDC X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=f2f0458a7b4075b1d52bb762380318532bbf4e5a;p=hadesdaq.git update hmon scripts for new MDC --- diff --git a/hmon/Hmon.pm b/hmon/Hmon.pm index 23c953b..7c99b82 100644 --- a/hmon/Hmon.pm +++ b/hmon/Hmon.pm @@ -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 .= ""; - $str .= sprintf("
",Hmon::findcolor(0,0,$steps,0)); + $str .= sprintf("",Hmon::findcolor(0,0,$steps,$lg)); return $str.="
" if $max == $min; $str .= sprintf("%#2.3G",$min); for (my $i = 1;$i<$steps;$i++) { # my $j = ($max-$min)/$steps*$i; - $str .= sprintf("",Hmon::findcolor($i,0,$steps,0)); + $str .= sprintf("",Hmon::findcolor($i,0,$steps,$lg)); } $str .= sprintf("%#2.3G",$max); $str .= "\n"; diff --git a/hmon/MDC.pm b/hmon/MDC.pm new file mode 120000 index 0000000..e71fc0c --- /dev/null +++ b/hmon/MDC.pm @@ -0,0 +1 @@ +../../hades_mdc_settings/scripts/MDC.pm \ No newline at end of file diff --git a/hmon/hmon_mdc_temp.pl b/hmon/hmon_mdc_temp.pl index 03fdeed..98feead 100755 --- a/hmon/hmon_mdc_temp.pl +++ b/hmon/hmon_mdc_temp.pl @@ -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++) { diff --git a/hmon/hmon_mdc_voltage.pl b/hmon/hmon_mdc_voltage.pl index 64d0165..f31d36c 100755 --- a/hmon/hmon_mdc_voltage.pl +++ b/hmon/hmon_mdc_voltage.pl @@ -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 .= "

"; 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 index 0000000..557a3ed --- /dev/null +++ b/hmon/hmon_mdcnew_missing.pl @@ -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 .= "

"; + 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 .= "

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 index 0000000..ff35c5a --- /dev/null +++ b/hmon/hmon_mdcnew_temp.pl @@ -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]."

".$str[1][0]."

".$str[1][1]."

".$str[2][0]);#."

".$str[1][2]."

".$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 - Ø %.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 index 0000000..6291213 --- /dev/null +++ b/hmon/hmon_mdcnew_temperatures.pl @@ -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@
\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 index 0000000..14fd6b0 --- /dev/null +++ b/hmon/hmon_mdcnew_voltage.pl @@ -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 .= "

"; + 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; +}