From 1ab92d5457dc749f4790a307b2ee622e12b8a7de Mon Sep 17 00:00:00 2001 From: hadaq Date: Tue, 7 Jan 2025 14:41:19 +0100 Subject: [PATCH] update hmon scripts --- .gitignore | 2 + hmon/Perl2Epics2.pm | 1 + hmon/automatic_restart_logger.conf | 8 + ...cal_recover_dead_slow_channels_logger.conf | 9 + hmon/hmon_mdcnew_rate.pl | 157 ++++++++++++------ hmon/hmon_mdcnew_triggererrors.pl | 71 ++++++++ hmon/permanent/hmon_environment.pl | 6 +- hmon/permanent/hmon_mdcpressure.pl | 2 + 8 files changed, 204 insertions(+), 52 deletions(-) create mode 120000 hmon/Perl2Epics2.pm create mode 100644 hmon/automatic_restart_logger.conf create mode 100644 hmon/ecal_recover_dead_slow_channels_logger.conf create mode 100644 hmon/hmon_mdcnew_triggererrors.pl diff --git a/.gitignore b/.gitignore index 1658b87..b18c1c6 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ oldscripts *.sav* threshold thr_trb3 +*_bck +test diff --git a/hmon/Perl2Epics2.pm b/hmon/Perl2Epics2.pm new file mode 120000 index 0000000..2e0884f --- /dev/null +++ b/hmon/Perl2Epics2.pm @@ -0,0 +1 @@ +../nettools/Perl2Epics2.pm \ No newline at end of file diff --git a/hmon/automatic_restart_logger.conf b/hmon/automatic_restart_logger.conf new file mode 100644 index 0000000..d430d81 --- /dev/null +++ b/hmon/automatic_restart_logger.conf @@ -0,0 +1,8 @@ +log4perl.logger.automatic_restart=DEBUG, A1 +log4perl.appender.A1=Log::Dispatch::FileRotate +log4perl.appender.A1.filename=/home/hadaq/trbsoft/hadesdaq/hmon/logs/automatic_restart.log +log4perl.appender.A1.max= 3 +log4perl.appender.A1.size= 1024000 +log4perl.appender.A1.mode=append +log4perl.appender.A1.layout=Log::Log4perl::Layout::PatternLayout +log4perl.appender.A1.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n diff --git a/hmon/ecal_recover_dead_slow_channels_logger.conf b/hmon/ecal_recover_dead_slow_channels_logger.conf new file mode 100644 index 0000000..3a22cc3 --- /dev/null +++ b/hmon/ecal_recover_dead_slow_channels_logger.conf @@ -0,0 +1,9 @@ +log4perl.logger.automatic_restart=DEBUG, A1 +log4perl.appender.A1=Log::Dispatch::FileRotate +log4perl.appender.A1.filename=/data/logs_permanent/ecal_recover_dead_slow_channels.log +log4perl.appender.A1.max= 1000 +log4perl.appender.A1.size= 1024000 +log4perl.appender.A1.mode=append +log4perl.appender.A1.layout=Log::Log4perl::Layout::PatternLayout +#log4perl.appender.A1.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n +log4perl.appender.A1.layout.ConversionPattern=%d %p> %m%n diff --git a/hmon/hmon_mdcnew_rate.pl b/hmon/hmon_mdcnew_rate.pl index 9ef1ecc..a6f0c4e 100755 --- a/hmon/hmon_mdcnew_rate.pl +++ b/hmon/hmon_mdcnew_rate.pl @@ -67,23 +67,57 @@ HPlot::PlotInit({ showvalues => 0, }); -my $str = Hmon::MakeTitle(13, 17, "MDC All Hit Rate / MDC Spike Rate",0); + +HPlot::PlotInit({ + name => "MdcRateCounts", + file => "files/MdcRateCounts", + title => "MDC Rate Counts", + entries => 501, + curves => 4, + type => HPlot::TYPE_HISTORY, + output => HPlot::OUT_PNG, + xlabel => "Hitrate", + ylabel => "Channel Count", + sizex => 850, + sizey => 530, + nokey => 0, + buffer => 1, + ymin => 0.99, + ymax => "1000<*", + xmin => -1, + xmax => 501, +# cbmax => "1000<*<1E6", +# cbmin => 0, + noinit => 1, + additional => "set logscale y; set xtics(0 0,'10' 29, '100' 50, '1k' 89, '4k' 126, '10k' 158, '40k' 223, '100k' 281, '400k' 398, '1M' 500);", + showvalues => 0, + xscale => 1, + countup => 1, + titles => ["Spikes","Hits","All","HitSum"], + }); + + +my $str = Hmon::MakeTitle(13, 17, "MDC Saved Hit Rate / MDC Spike Rate",0); $str .= qq@\n@; $str .= qq@\n@; - $str .= Hmon::MakeFooter(); -Hmon::WriteFile("MDCnewRate",$str); +Hmon::WriteFile("MDCNewRate",$str); +$str = Hmon::MakeTitle(11, 11, "MDC Rate / Channel",0); +$str .= qq@\n@; +$str .= Hmon::MakeFooter(); +Hmon::WriteFile("MDCNewRateChannels",$str); my $old; -my $oold; -my $oldtime = time(); -my $ooldtime = time(); -my $time = time(); -my $otime = time(); +# my $oold; +my $oldtime; +$oldtime->[0]=0;$oldtime->[1]=0;$oldtime->[2]=0; +# my $ooldtime = time(); +# my $otime = time(); my $diff; my $iter = 0; +my $histmax = 500; trb_init_ports() or die trb_strerror(); @@ -95,14 +129,21 @@ my $shorttext = "OK"; while(1) { HPlot::PlotClear('MdcRate'); HPlot::PlotClear('MdcSpikeRate'); - - my $tdiff = (time() - $oldtime)||1; - my $o = trb_register_read_mem(0xfe91,0xc120,0,32) or die trb_strerror() or sleep 5 and next; - my $otdiff = (time() - $ooldtime)||1; - my $oo = trb_register_read_mem(0xfe91,0xdfc0,0,32) or die trb_strerror() or sleep 5 and next; + + my $histograms; + + my $tdiff->[0] = (time() - $oldtime->[0])||1; + $oldtime->[0] = time(); + my $o->[0] = trb_register_read_mem(0xfe91,0xc120,0,32) or die trb_strerror() or sleep 5 and next; + $tdiff->[1] = (time() - $oldtime->[1])||1; + $oldtime->[1] = time(); + $o->[1] = trb_register_read_mem(0xfe91,0xc100,0,32) or die trb_strerror() or sleep 5 and next; + $tdiff->[2] = (time() - $oldtime->[2])||1; + $oldtime->[2] = time(); + $o->[2] = trb_register_read_mem(0xfe91,0xdfc0,0,32) or die trb_strerror() or sleep 5 and next; if (defined $old) { - foreach my $b (keys %$o) { + foreach my $b (keys %{$o->[0]}) { #my $ratesum = 0; my($pl,$se,$bo,$en) = MDC::get_position($b); @@ -110,49 +151,65 @@ while(1) { my $xpos = $en*32; my $ypos = $pl*120+$se*20+$bo; - for my $v (0..31) { - my $vdiff = ($o->{$b}->[$v]&0xffffff) - ($old->{$b}->[$v]&0xffffff); - + for my $v (0..31) { #Spikes + my $vdiff = ($o->[0]{$b}[$v]&0xffffff) - ($old->[0]{$b}[$v]&0xffffff); if ($vdiff < 0) { $vdiff += 2**24;} - $diff->{$b}->[$v] = $vdiff/$tdiff; - HPlot::PlotFill('MdcSpikeRate',$diff->{$b}->[$v],$xpos+$v,$ypos); + $vdiff /= $tdiff->[0]; + $diff->[0]{$b}[$v] = $vdiff; + HPlot::PlotFill('MdcSpikeRate',$vdiff,$xpos+$v,$ypos); +# $histograms->[0][max(0,min(1000,log($vdiff||.001)*64))]++; + $histograms->[0][histbin($vdiff)]++; } - for my $v (0..31) { - my $vdiff = ($oo->{$b}->[$v]&0xffffff) - ($oold->{$b}->[$v]&0xffffff); - + for my $v (0..31) {#Saved + my $vdiff = ($o->[1]{$b}[$v]&0xffffff) - ($old->[1]{$b}[$v]&0xffffff); if ($vdiff < 0) { $vdiff += 2**24;} - $diff->{$b}->[$v+32] = $vdiff/$otdiff; - HPlot::PlotFill('MdcRate',$diff->{$b}->[$v+32],$xpos+$v,$ypos); + $vdiff /= $tdiff->[1]; + $diff->[1]{$b}[$v] = $vdiff; + HPlot::PlotFill('MdcRate',$vdiff,$xpos+$v,$ypos); + $histograms->[1][histbin($vdiff)]++; + } + for my $v (0..31) { #AllHits + my $vdiff = ($o->[2]{$b}[$v]&0xffffff) - ($old->[2]{$b}[$v]&0xffffff); + if ($vdiff < 0) { $vdiff += 2**24;} + $vdiff /= $tdiff->[2]; + $diff->[2]{$b}[$v] = $vdiff; + $histograms->[2][histbin($vdiff)]++; } - } HPlot::PlotDrawFork('MdcRate'); HPlot::PlotDrawFork('MdcSpikeRate'); - - - - } - -# if(sum(@lowrate) > $lowratecount * 6) { -# -# $qastate = QA::OK; -# $text = "OK"; -# $shorttext = ""; -# -# for my $i (0..5) { -# if ($highrate[$i] > $highratecount) { -# $qastate = QA::ERROR; -# $shorttext = "Problem"; -# $text = "Sector $i has $highrate[$i] high rates."; -# } -# } -# -# # QA::WriteQALog($fqa,"feeerr","rpc", 60, $qastate, "RPC Thresh", $shorttext, $text); -# } - + + for my $i (0..2) { + for my $j (0..$histmax) { + HPlot::PlotFill('MdcRateCounts',($histograms->[$i][$j]||1),$j,$i); + } + } + my $sum = 0; + for my $j (0..$histmax) { + $sum += $histograms->[2][$histmax-$j]//0; + HPlot::PlotFill('MdcRateCounts',$sum,$histmax-$j,3); + } + HPlot::PlotDrawFork('MdcRateCounts'); +# print Dumper $histograms; +# exit; + } + $old = $o; - $oold = $oo; - $oldtime = time(); - $ooldtime = time(); sleep 1; + } + +sub histbin { + my $val = shift @_; + my $ret = 0; + + + $ret = sqrt(sqrt($val*62500)); + + + return 0 if $ret < 0; + return $histmax if $ret > $histmax; + return $ret; + +} + diff --git a/hmon/hmon_mdcnew_triggererrors.pl b/hmon/hmon_mdcnew_triggererrors.pl new file mode 100644 index 0000000..b9d4994 --- /dev/null +++ b/hmon/hmon_mdcnew_triggererrors.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/permanent/hmon_environment.pl b/hmon/permanent/hmon_environment.pl index ca10c03..994905b 100755 --- a/hmon/permanent/hmon_environment.pl +++ b/hmon/permanent/hmon_environment.pl @@ -89,9 +89,10 @@ $str .= Hmon::MakeFooter(); Hmon::WriteFile("Environment",$str); while (1) {{ +system("date"); my $port = IO::Socket::INET->new(PeerAddr => "192.168.103.118", PeerPort => 2323, Proto => "tcp", Type => SOCK_STREAM, Timeout => 2) or (print("Device not found") && next); - +print "opened\n"; my ($mx,$my,$mz,$t,$p,$h); my $i = 8; while(<$port>) { @@ -109,7 +110,7 @@ while (1) {{ last unless $i--; } - +print "Done\n"; my $tp = 243.12*((17.62*$t)/(243.12+$t)+log($h/100))/((17.62*243.12)/(243.12+$t)-log($h/100)); my $value0 = sprintf("%2.1f° / %imbar",$t,$p); @@ -124,6 +125,7 @@ while (1) {{ HPlot::PlotDraw("Envtemp"); HPlot::PlotDraw("Envhum"); HPlot::PlotDraw("Envpres"); +print "closing\n"; $port->close(); sleep 9; diff --git a/hmon/permanent/hmon_mdcpressure.pl b/hmon/permanent/hmon_mdcpressure.pl index 6c0bc57..31f9e58 100755 --- a/hmon/permanent/hmon_mdcpressure.pl +++ b/hmon/permanent/hmon_mdcpressure.pl @@ -96,6 +96,8 @@ $plot2->{titles}->[4] = "cooling air"; $plot2->{xlabel} = "Minutes"; $plot2->{ylabel} = "°C"; #$plot2->{ymin} = 15; +$plot->{ymin} = "0<*"; +$plot->{ymax} = "*<50"; $plot2->{sizex} = 630; $plot2->{sizey} = 220; $plot2->{nokey} = 0; -- 2.43.0