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@<img src="%ADDPNG files/MdcRate.png%" type="image/png">\n@;
$str .= qq@<img src="%ADDPNG files/MdcSpikeRate.png%" type="image/png">\n@;
-
$str .= Hmon::MakeFooter();
-Hmon::WriteFile("MDCnewRate",$str);
+Hmon::WriteFile("MDCNewRate",$str);
+$str = Hmon::MakeTitle(11, 11, "MDC Rate / Channel",0);
+$str .= qq@<img src="%ADDPNG files/MdcRateCounts.png%" type="image/png">\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();
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);
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;
+
+}
+
--- /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;
+ }
+