# 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";
--- /dev/null
+../../hades_mdc_settings/scripts/MDC.pm
\ No newline at end of file
}
($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++) {
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++) {
--- /dev/null
+#!/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;
+}
--- /dev/null
+#!/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 - Ø %.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;
+}
--- /dev/null
+#!/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;
+ }
+
--- /dev/null
+#!/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;
+}