#$entries->{'hv2'} = ['mdchv','stshv','frpchv','itofhv','valve'];
$entries->{'hv2'} = ['mdchv','','','','sequencer'];
$entries->{'misc'} = ['seu','calib','magnet','env','valve'];
-$entries->{'misc2'} = ['ecal','tdctot','boards','ip',''];
+$entries->{'misc2'} = ['ecal','tdctot','boards','ip','envCH'];
$entries->{'pion'} = ['nxstatus', 'HV', 'HVcurr', 'cooling','seu'];
# Switched off systems
###############################################################################
-our $RichOff = 0;
+our $RichOff = 1;
-our $MdcHvOff = 0;
-our $RichHvOff = 0;
-our $RichGasOff = 0;
-our $TofHvOff = 0;
-our $RpcHvOff = 0;
-our $FwHvOff = 0;
-our $MagnetOff = 0;
+our $MdcHvOff = 1;
+our $RichHvOff = 1;
+our $RichGasOff = 1;
+our $TofHvOff = 1;
+our $RpcHvOff = 1;
+our $FwHvOff = 1;
+our $MagnetOff = 1;
our $StsHvOff = 1;
our $StartHvOff = 1;
our $ItofHvOff = 1;
our $FrpcHvOff = 1;
-our $EcalHvOff = 0;
+our $EcalHvOff = 1;
our $QAServerOff = 0;
###############################################################################
our @mdc_boards_removed =(0x2257); # 2333 added 2024-03-01 #(0x2203, 0x2027, 0x2057); #(0x2257, 0x2029); # 2233 added 2014-08-28 , 2203 at 2014/09/03, 2029 2014/09/23
-our @mdc_new_boards_removed =(0x8e7b,0xa7b0,0xa7b1,
- 0x8e5a,0xa5a0,0xa5a1,0xa5a2); #(0x8e95,0xa950,0xa951); #0x8e7b,0xa7b0,0xa7b1
-
+our @mdc_new_boards_removed =( #0x8e7b,0xa7b0,0xa7b1,
+# 0x8e5a,0xa5a0,0xa5a1,0xa5a2); #(0x8e95,0xa950,0xa951); #0x8e7b,0xa7b0,0xa7b1
+);
our @mdc_chambers_removed =();
our @rich_boards_removed =();#(0x71a4,0x71a5,0x71b4,0x71b5,0x72a4,0x72a5,0x72b4,0x72b5,0x73a4,0x73a5,0x73b4,0x73b5,0x826a);
our @tof_boards_removed =();
--- /dev/null
+Checks for some boards if they are loaded a correct FPGA design.
+<br>
+Checks for all boards if they have somewhat reasonable addresses, e.g. not a default address.
+
+<h3>Error handling</h3>
+Most issues can be solved with a DAQ restart. If the boards are from MDC, do a "Resync MDC".
--- /dev/null
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+use LWP::Simple qw(get);
+use JSON qw( decode_json encode_json );
+use Data::Dumper;
+use CGI qw(:standard);
+use CGI::Carp qw(fatalsToBrowser);
+use Scalar::Util;
+use File::stat;
+
+print "Cache-Control: no-cache, must-revalidate, max-age=1\r\n";
+print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\r\n";
+print "Content-type: application/json\r\n\r\n";
+
+my $q = CGI->new;
+
+my $curve = $q->param('curve') // 0;
+
+
+exit unless $q->param('file') and $q->param('file') =~ /^[a-zA-Z0-9_\-\/]+$/;
+my $file = $q->param('file');
+$file = "files/$file.json";
+exit unless (-e $file);
+
+
+open(FH,"<",$file) or die "$file.json file doesn't exist!\n";
+my $d = <FH>;
+close FH;
+my $input = JSON::decode_json($d) or die "Can't read input file";
+
+my $data;
+my $ts = stat($file)->mtime;
+
+##########
+## Export of 1D
+##########
+
+if($input->{"type"} != 3) {
+ open(TH,"<","../hadesroot/files/TemplateTH1.json") or die "TemplateTH1.json file doesn't exist!\n";
+ local $/ = undef;
+ $d = <TH>;
+ close TH;
+ $data = JSON::decode_json($d) or die "Not a valid JSON Template";
+
+ if ($input->{"colors"}[$curve]) {
+ $input->{"colors"}[$curve] =~ s/#//;
+ $data->{"fOption"} = "hist line_".$input->{"colors"}[$curve];
+ }
+
+ my $xbins = (scalar @{$input->{"value"}[$curve]});
+ #add overflow bins
+ unshift(@{$input->{"value"}[$curve]},0);
+ push(@{$input->{"value"}[$curve]},0);
+ $data->{"fArray"} = $input->{"value"}[$curve];
+ $data->{"fName"} = $q->param('file');
+ $data->{"fTitle"} = $input->{"name"} ;
+ $data->{"NCells"} = $xbins +2;
+ $data->{"fXaxis"}{"fTitle"} = $input->{"xlabel"};
+ $data->{"fXaxis"}{"fNbins"} = $xbins;
+ $data->{"fXaxis"}{"fXmin"} = 0;
+ $data->{"fXaxis"}{"fXmax"} = $xbins / ($input->{"xscale"}//1);
+ $data->{"export_time"} = $ts;
+ $data->{"fYaxis"}{"fTitle"} = $input->{"ylabel"} ;
+ }
+
+##########
+## Export of 2D
+##########
+
+else {
+ open(TH,"<","../hadesroot/files/TemplateTH2.json") or die "TemplateTH2.json file doesn't exist!\n";
+ local $/ = undef;
+ my $d = <TH>;
+ close TH;
+ $data = JSON::decode_json($d) or die "Not a valid JSON Template";
+
+ my $xbins = $input->{"entries"}*1;
+ my $ybins = $input->{"curves"}*1;
+
+# my $xbins = (scalar @{$input->{"value"}[-1]});
+# my $ybins = (scalar @{$input->{"value"}});
+
+# print "$xbins $ybins \n";
+##########
+## Merge 2D into 1D with overflow bins, sanitize values
+##########
+ my $values;
+ push(@$values,0) for (0..$xbins+1);
+ for(my $y=0;$y<$ybins;$y++) {
+ push(@$values,0);
+# push(@$values, @{$input->{"value"}[$y]} );
+# foreach my $v (@{$input->{"value"}[$y]}) {
+ for(my $x=0;$x<$xbins;$x++) {
+ my $v = $input->{"value"}[$y][$x];
+ $v = 0 if !defined $v;
+ $v = 0 if $v eq 'NaN';
+ $v *= 1;
+ push(@$values,$v);
+ }
+ push(@$values,0);
+ }
+
+##########
+## Copy xtics and ytics
+##########
+ my @xtics;
+ my @ytics;
+ if ($input->{"additional"}) {
+ my @a = split(";",$input->{"additional"});
+ foreach my $al (@a) {
+ next unless $al =~ /^\s*set xtics/;
+ $al =~ s/^\s*set xtics\s*\(//;
+ $al =~ s/\s*\)\s*;?\s*$//;
+ my @tics = split(",",$al);
+ foreach my $t (@tics) {
+ my ($tv,$tp) = $t =~ /\s*\'(.+)\'\s*(\d+)/;
+ if (defined $tv && defined $tp) {
+ $xtics[$tp]=$tv;
+ }
+ else {
+ ($tp) = $t =~ /^\s*(\d+)\s*$/;
+ $xtics[$tp]=$tp;
+ }
+ }
+ last;
+ }
+ foreach my $al (@a) {
+ next unless $al =~ /^\s*set ytics/;
+ $al =~ s/^\s*set ytics\s*\(//;
+ $al =~ s/\s*\)\s*;\s*$//;
+ my @tics = split(",",$al);
+ foreach my $t (@tics) {
+ my ($tv,$tp) = $t =~ /\s*\'(.+)\'\s*(\d+)/;
+ $ytics[$tp]=$tv if defined $tv;
+ ($tp) = $t =~ /\s*(\d+)/ unless defined $tv;
+ $ytics[$tp]=$tp if defined $tp && !defined $tv;
+ }
+ last;
+ }
+ }
+ !defined $_ and $_ = '' for @xtics;
+ !defined $_ and $_ = '' for @ytics;
+
+##########
+## Fill data in Root structure
+##########
+ $data->{"fName"} = $q->param('file');
+ $data->{"fTitle"} = $input->{"title"} // $input->{"name"} ;
+ $data->{"fNcells"} = ($xbins+2)*($ybins+2);
+
+ $data->{"fXaxis"}{"fNbins"} = $xbins;
+ $data->{"fXaxis"}{"fXmin"} = 0;
+ $data->{"fXaxis"}{"fXmax"} = $xbins / ($input->{"xscale"}//1);
+ $data->{"fXaxis"}{"fTitle"} = $input->{"xlabel"};
+
+ if(@xtics) {
+ $data->{"XLABEL"} = \@xtics;
+ }
+ if(@ytics) {
+ $data->{"YLABEL"} = \@ytics;
+ }
+
+ if(Scalar::Util::looks_like_number($input->{'cbmin'}) && Scalar::Util::looks_like_number($input->{'cbmax'})) {
+ $data->{"FRAME"}{'zoom_zmin'} = $input->{'cbmin'};
+ $data->{"FRAME"}{'zoom_zmax'} = $input->{'cbmax'};
+ $data->{"FRAME"}{'zoom_changed_z'} = 1;
+ }
+
+ $data->{"fYaxis"}{"fNbins"} = $ybins;
+ $data->{"fYaxis"}{"fXmin"} = 0;
+ $data->{"fYaxis"}{"fXmax"} = $ybins / ($input->{"yscale"}//1);
+ $data->{"fYaxis"}{"fTitle"} = $input->{"ylabel"} ;
+
+ $data->{"fZaxis"}{"fTitle"} = $input->{"cblabel"} ;
+ $data->{"fZaxis"}{"fNbins"} = 50 ;
+
+ $data->{"fArray"} = $values;
+ $data->{"export_time"} = $ts;
+
+ }
+# my $json = JSON->new->allow_nonref;
+# $json->canonical(1);
+print encode_json($data);
+# print $json->pretty->encode($data);
+
my $MYF;
open ($MYF, "<files/QA.htt") or print "File not found." and exit;
while (<$MYF>){
- if($_ =~ m/$query/) {
+ if($_ =~ m/$query"/) {
# print $_."<br>";
$out .= "<table><tr><th style='width:80px'>Entry<td><b>$query</b> - ";
$_ =~ m/class="(\d+)/;
my $mdcmissingtime = $store->{mdc}{missingtime};
my $loggerperiod = 12; #times 5 seconds sleep
my $timecnt;
-
+my $qastate;
my $fh;
open ($fh, ">", "/tmp/mdc_number_missing_boards");
####config
my @all_boards =();
- my @mdc_boards =(0x8015,0x8016,
+ my @mdc_boards =(#0x8015,0x8016,
# ###MDC Concentrator
# 0x1000,0x1001,0x1002,0x1003,0x1004,
# 0x1010,0x1011,0x1012,0x1013,0x1014,
# 0x1030,0x1031,0x1032,0x1033,0x1034,
# 0x1040,0x1041,0x1042,0x1043,0x1044,
# 0x1050,0x1051,0x1052,0x1053,0x1054,
- 0x1100,0x1101,0x1102,0x1103,0x1104,
- 0x1110,0x1111,0x1112,0x1113,0x1114,
- 0x1120,0x1121,0x1122,0x1123,0x1124,
- 0x1130,0x1131,0x1132,0x1133,0x1134,
- 0x1140,0x1141,0x1142,0x1143,0x1144,
- 0x1150,0x1151,0x1152,0x1153,0x1154,
+# 0x1100,0x1101,0x1102,0x1103,0x1104,
+# 0x1110,0x1111,0x1112,0x1113,0x1114,
+# 0x1120,0x1121,0x1122,0x1123,0x1124,
+# 0x1130,0x1131,0x1132,0x1133,0x1134,
+# 0x1140,0x1141,0x1142,0x1143,0x1144,
+# 0x1150,0x1151,0x1152,0x1153,0x1154,
###
);
# push(@mdc_boards,( 0x8e60, 0xa600, 0xa601, 0x8e61, 0xa610, 0xa611, 0x8e62, 0xa620, 0xa621, 0x8e63, 0xa630, 0xa631, 0x8e64, 0xa640, 0xa641, 0x8e65, 0xa650, 0xa651, 0x8e66, 0xa660, 0xa661, 0x8e67, 0xa670, 0xa671, 0x8e68, 0xa680, 0xa681, 0x8e69, 0xa690, 0xa691, 0x8e6a, 0xa6a0, 0xa6a1, 0x8e6b, 0xa6b0, 0xa6b1, 0x8e6c, 0xa6c0, 0xa6c1, 0x8e6d, 0xa6d0, 0xa6d1, 0x8e6e, 0xa6e0, 0xa6e1, 0xa6e2, 0x8e6f, 0xa6f0, 0xa6f1, 0xa6f2, 0x8e70, 0xa700, 0xa701, 0x8e71, 0xa710, 0xa711, 0x8e72, 0xa720, 0xa721, 0x8e73, 0xa730, 0xa731, 0x8e74, 0xa740, 0xa741, 0x8e75, 0xa750, 0xa751, 0x8e76, 0xa760, 0xa761, 0x8e77, 0xa770, 0xa771, 0x8e78, 0xa780, 0xa781, 0x8e79, 0xa790, 0xa791, 0x8e7a, 0xa7a0, 0xa7a1, 0x8e7b, 0xa7b0, 0xa7b1, 0x8e7c, 0xa7c0, 0xa7c1, 0x8e7d, 0xa7d0, 0xa7d1, 0x8e7e, 0xa7e0, 0xa7e1, 0xa7e2, 0x8e7f, 0xa7f0, 0xa7f1, 0xa7f2, 0x8e80, 0xa800, 0xa801, 0x8e81, 0xa810, 0xa811, 0x8e82, 0xa820, 0xa821, 0x8e83, 0xa830, 0xa831, 0x8e84, 0xa840, 0xa841, 0x8e85, 0xa850, 0xa851, 0x8e86, 0xa860, 0xa861, 0x8e87, 0xa870, 0xa871, 0x8e88, 0xa880, 0xa881, 0x8e89, 0xa890, 0xa891, 0x8e8a, 0xa8a0, 0xa8a1, 0x8e8b, 0xa8b0, 0xa8b1, 0x8e8c, 0xa8c0, 0xa8c1, 0x8e8d, 0xa8d0, 0xa8d1, 0x8e8e, 0xa8e0, 0xa8e1, 0xa8e2, 0x8e8f, 0xa8f0, 0xa8f1, 0xa8f2, 0x8e90, 0xa900, 0xa901, 0x8e91, 0xa910, 0xa911, 0x8e92, 0xa920, 0xa921, 0x8e93, 0xa930, 0xa931, 0x8e94, 0xa940, 0xa941, 0x8e95, 0xa950, 0xa951, 0x8e96, 0xa960, 0xa961, 0x8e97, 0xa970, 0xa971, 0x8e98, 0xa980, 0xa981, 0x8e99, 0xa990, 0xa991, 0x8e9a, 0xa9a0, 0xa9a1, 0x8e9b, 0xa9b0, 0xa9b1, 0x8e9c, 0xa9c0, 0xa9c1, 0x8e9d, 0xa9d0, 0xa9d1, 0x8e9e, 0xa9e0, 0xa9e1, 0xa9e2, 0x8e9f, 0xa9f0, 0xa9f1, 0xa9f2, 0x8ea0, 0xaa00, 0xaa01, 0x8ea1, 0xaa10, 0xaa11, 0x8ea2, 0xaa20, 0xaa21, 0x8ea3, 0xaa30, 0xaa31, 0x8ea4, 0xaa40, 0xaa41, 0x8ea5, 0xaa50, 0xaa51, 0x8ea6, 0xaa60, 0xaa61, 0x8ea7, 0xaa70, 0xaa71, 0x8ea8, 0xaa80, 0xaa81, 0x8ea9, 0xaa90, 0xaa91, 0x8eaa, 0xaaa0, 0xaaa1, 0x8eab, 0xaab0, 0xaab1, 0x8eac, 0xaac0, 0xaac1, 0x8ead, 0xaad0, 0xaad1, 0x8eae, 0xaae0, 0xaae1, 0xaae2, 0x8eaf, 0xaaf0, 0xaaf1, 0xaaf2, 0x8eb0, 0xab00, 0xab01, 0x8eb1, 0xab10, 0xab11, 0x8eb2, 0xab20, 0xab21, 0x8eb3, 0xab30, 0xab31, 0x8eb4, 0xab40, 0xab41, 0x8eb5, 0xab50, 0xab51, 0x8eb6, 0xab60, 0xab61, 0x8eb7, 0xab70, 0xab71, 0x8eb8, 0xab80, 0xab81, 0x8eb9, 0xab90, 0xab91, 0x8eba, 0xaba0, 0xaba1, 0x8ebb, 0xabb0, 0xabb1, 0x8ebc, 0xabc0, 0xabc1, 0x8ebd, 0xabd0, 0xabd1, 0x8ebe, 0xabe0, 0xabe1, 0xabe2, 0x8ebf, 0xabf0, 0xabf1, 0xabf2)); #MDC II
#
#old planes 3/4
- foreach my $p (2..3) {
- foreach my $s (0..5) {
- foreach my $m (0..15) {
- next if($p==0 && $m >=14);
- my $address = 0x2000 + $p*0x100 + $s*0x10 + $m;
- push (@mdc_boards, $address);
- }
- }
- }
+# foreach my $p (2..3) {
+# foreach my $s (0..5) {
+# foreach my $m (0..15) {
+# next if($p==0 && $m >=14);
+# my $address = 0x2000 + $p*0x100 + $s*0x10 + $m;
+# push (@mdc_boards, $address);
+# }
+# }
+# }
push @all_boards, $result[$k];
}
-###MDC
-########################
- my(%mdc_mask, @mdc_results);
- $mdc_results[$_] = [] foreach (0 .. 7);
- foreach my $element (@all_boards) { $mdc_mask{$element} |= 1 }
- foreach my $element (@mdc_boards) { $mdc_mask{$element} |= 2 }
- foreach my $element (@QA::mdc_boards_removed) { $mdc_mask{$element} |= 4 }
- foreach my $element (keys %mdc_mask) {
- push @{$mdc_results[0]}, sprintf("0x%x",$element);
- push @{$mdc_results[$mdc_mask{$element}]}, sprintf("0x%x",$element);
- }
-
- my $num_mdc_missing = (scalar @{$mdc_results[2]});
- my $num_mdc_mistake = (scalar @{$mdc_results[4]});
- my @sorted_mdc_results = sort @{$mdc_results[2]};
-
- $mdcmissingtime = 0 if $num_mdc_missing < 2;
- $mdcmissingtime += max(0,$num_mdc_missing-1);
-
- #Are two boards from the same chamber missing?
- my @mdcboards = (@sorted_mdc_results,@QA::mdc_boards_removed);
- chop(@mdcboards);
- my @uniqchambers = uniq @mdcboards;
- my $samechamberboards = (scalar @mdcboards) - (scalar @uniqchambers);
- # if(scalar @mdcboards != scalar @uniqchambers) {$samechamberboards = 1;}
-
- #Are two boards from the same sector missing?
- my @mdcboardssec = chop(@mdcboards);
- my @uniqchamberssec = uniq @mdcboardssec;
- my $samesectorboards = (scalar @mdcboardssec) - (scalar @uniqchamberssec);
- # if(scalar @mdcboards != scalar @uniqchambers) {$samesectorboards = 1;}
-
- print $fh "$num_mdc_missing\n";
- $fh->autoflush(1);
- seek($fh, 0, 0);
-
- my $title = "MDC 3/4";
- my $value = "OK ".(scalar @mdc_boards - scalar @QA::mdc_boards_removed);
- $value .= "(-".(scalar @QA::mdc_boards_removed).")" if scalar @QA::mdc_boards_removed;
- if ($num_mdc_missing > 0) {$value = "$num_mdc_missing / ".(scalar @mdc_boards - scalar @QA::mdc_boards_removed)." miss";}
- if ($num_mdc_mistake > 0) {$value = "Check Script";}
- my $longtext = (scalar @mdc_boards). " boards. ".(scalar @QA::mdc_boards_removed)." removed<br>";
- if ($num_mdc_missing > 0) {$longtext .= "Endp @sorted_mdc_results missing<br>"};
- if ($num_mdc_mistake > 0) {$longtext .= " Endp @{$mdc_results[4]} not known";}
-
- my $qastate = QA::GetQAState('below',$num_mdc_missing,@QA::MdcEndpMissingLimits);
- $qastate = max($qastate,QA::ERROR) if $samechamberboards;
- $qastate = max($qastate,QA::WARN) if $samesectorboards;
- $qastate = max($qastate,QA::ERROR) if $samesectorboards > 2;
- $qastate = max($qastate,QA::WARN) if $mdcmissingtime > 200;
- $qastate = max($qastate,QA::NOTE) if $num_mdc_missing >= 1;
-
- $longtext .= "<br>Some boards are missing for a long time. Better do a restart." if $mdcmissingtime > 360;
-
- Hmon::Speak('mdcmissonce',"$num_mdc_missing M-D-C Frontends missing") if($qastate > 60 && $qastate < QA::ERROR );
- Hmon::Speak('mdcmiss',"$num_mdc_missing M-D-C Frontends missing") if($qastate >= QA::ERROR );
- QA::WriteQALog($flog,"endp","mdc",$waittime,$qastate,$title,$value,$longtext);
- if($qastate > 60) {
- $longtext =~ s/\<br\>//g;
- $longtext =~ s/\(/\\\\\(/g;
- $longtext =~ s/\)/\\\\\)/g;
- system("logger -p local1.info -t DAQ Endp \\<E\\> $longtext") unless (($timecnt->{mdc}++)%$loggerperiod);
- }
- else {$timecnt->{mdc} = 0;}
-
- $store->{mdc}{missing} = \@sorted_mdc_results;
- $store->{mdc}{missingnumber} = $num_mdc_missing;
- $store->{mdc}{missingtime} = $mdcmissingtime;
- store($store,$storefile);
-
+# ###MDC
+# ########################
+# my(%mdc_mask, @mdc_results);
+# $mdc_results[$_] = [] foreach (0 .. 7);
+# foreach my $element (@all_boards) { $mdc_mask{$element} |= 1 }
+# foreach my $element (@mdc_boards) { $mdc_mask{$element} |= 2 }
+# foreach my $element (@QA::mdc_boards_removed) { $mdc_mask{$element} |= 4 }
+# foreach my $element (keys %mdc_mask) {
+# push @{$mdc_results[0]}, sprintf("0x%x",$element);
+# push @{$mdc_results[$mdc_mask{$element}]}, sprintf("0x%x",$element);
+# }
+#
+# my $num_mdc_missing = (scalar @{$mdc_results[2]});
+# my $num_mdc_mistake = (scalar @{$mdc_results[4]});
+# my @sorted_mdc_results = sort @{$mdc_results[2]};
+#
+# $mdcmissingtime = 0 if $num_mdc_missing < 2;
+# $mdcmissingtime += max(0,$num_mdc_missing-1);
+#
+# #Are two boards from the same chamber missing?
+# my @mdcboards = (@sorted_mdc_results,@QA::mdc_boards_removed);
+# chop(@mdcboards);
+# my @uniqchambers = uniq @mdcboards;
+# my $samechamberboards = (scalar @mdcboards) - (scalar @uniqchambers);
+# # if(scalar @mdcboards != scalar @uniqchambers) {$samechamberboards = 1;}
+#
+# #Are two boards from the same sector missing?
+# my @mdcboardssec = chop(@mdcboards);
+# my @uniqchamberssec = uniq @mdcboardssec;
+# my $samesectorboards = (scalar @mdcboardssec) - (scalar @uniqchamberssec);
+# # if(scalar @mdcboards != scalar @uniqchambers) {$samesectorboards = 1;}
+#
+# print $fh "$num_mdc_missing\n";
+# $fh->autoflush(1);
+# seek($fh, 0, 0);
+#
+# my $title = "MDC 3/4";
+# my $value = "OK ".(scalar @mdc_boards - scalar @QA::mdc_boards_removed);
+# $value .= "(-".(scalar @QA::mdc_boards_removed).")" if scalar @QA::mdc_boards_removed;
+# if ($num_mdc_missing > 0) {$value = "$num_mdc_missing / ".(scalar @mdc_boards - scalar @QA::mdc_boards_removed)." miss";}
+# if ($num_mdc_mistake > 0) {$value = "Check Script";}
+# my $longtext = (scalar @mdc_boards). " boards. ".(scalar @QA::mdc_boards_removed)." removed<br>";
+# if ($num_mdc_missing > 0) {$longtext .= "Endp @sorted_mdc_results missing<br>"};
+# if ($num_mdc_mistake > 0) {$longtext .= " Endp @{$mdc_results[4]} not known";}
+#
+# my $qastate = QA::GetQAState('below',$num_mdc_missing,@QA::MdcEndpMissingLimits);
+# $qastate = max($qastate,QA::ERROR) if $samechamberboards;
+# $qastate = max($qastate,QA::WARN) if $samesectorboards;
+# $qastate = max($qastate,QA::ERROR) if $samesectorboards > 2;
+# $qastate = max($qastate,QA::WARN) if $mdcmissingtime > 200;
+# $qastate = max($qastate,QA::NOTE) if $num_mdc_missing >= 1;
+#
+# $longtext .= "<br>Some boards are missing for a long time. Better do a restart." if $mdcmissingtime > 360;
+#
+# Hmon::Speak('mdcmissonce',"$num_mdc_missing M-D-C Frontends missing") if($qastate > 60 && $qastate < QA::ERROR );
+# Hmon::Speak('mdcmiss',"$num_mdc_missing M-D-C Frontends missing") if($qastate >= QA::ERROR );
+# QA::WriteQALog($flog,"endp","mdc",$waittime,$qastate,$title,$value,$longtext);
+# if($qastate > 60) {
+# $longtext =~ s/\<br\>//g;
+# $longtext =~ s/\(/\\\\\(/g;
+# $longtext =~ s/\)/\\\\\)/g;
+# system("logger -p local1.info -t DAQ Endp \\<E\\> $longtext") unless (($timecnt->{mdc}++)%$loggerperiod);
+# }
+# else {$timecnt->{mdc} = 0;}
+#
+# $store->{mdc}{missing} = \@sorted_mdc_results;
+# $store->{mdc}{missingnumber} = $num_mdc_missing;
+# $store->{mdc}{missingtime} = $mdcmissingtime;
+# store($store,$storefile);
+#
###RICH
########################
my $value = "";
$value = "$trginperr errors" if $trginperr;
- QA::WriteQALog($fqa, "feeerr", "trginp", 60, ($trginperr>5)?QA::ERROR:QA::OK, "Trg. Inputs",$value ,$trginperrlist);
+ QA::WriteQALog($fqa, "feeerr", "trginp", 60, ($trginperr>10)?QA::WARN_2:QA::OK, "Trg. Inputs",$value ,$trginperrlist);
#Clean up and sleep (also needed at start-up)
trb_register_write(0xffff,0x20,0x10);
####config
my @mdc_boards;
+ push(@mdc_boards,(0x8015,0x8016));
+# push(@mdc_boards,(0x8500, 0x8501, 0x8502, 0x8503, 0x8504, 0x8510, 0x8511, 0x8512, 0x8513, 0x8520, 0x8521, 0x8522, 0x8523, 0x8530, 0x8531, 0x8532, 0x8533, 0x8540, 0x8541, 0x8542, 0x8543, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554)); #MDC 1/2 hubs
+# push(@mdc_boards,(0x8560, 0x8561, 0x8562, 0x8563, 0x8570, 0x8571, 0x8572, 0x8573, 0x8580, 0x8581, 0x8582, 0x8583, 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85b0, 0x85b1, 0x85b2, 0x85b3)); #MDC 3/4 hubs w/o sec. 4
-push(@mdc_boards,(0x8500, 0x8501, 0x8502, 0x8503, 0x8504, 0x8510, 0x8511, 0x8512, 0x8513, 0x8520, 0x8521, 0x8522, 0x8523, 0x8530, 0x8531, 0x8532, 0x8533, 0x8540, 0x8541, 0x8542, 0x8543, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554)); #MDC 1/2 hubs
+# push(@mdc_boards,( 0x8e00, 0xa000, 0xa001, 0x8e01, 0xa010, 0xa011, 0xa012, 0x8e02, 0xa020, 0xa021, 0xa022, 0x8e03, 0xa030, 0xa031, 0x8e04, 0xa040, 0xa041, 0x8e05, 0xa050, 0xa051, 0x8e06, 0xa060, 0xa061, 0xa062, 0x8e07, 0xa070, 0xa071, 0xa072, 0x8e08, 0xa080, 0xa081, 0x8e09, 0xa090, 0xa091, 0x8e0a, 0xa0a0, 0xa0a1, 0xa0a2, 0x8e0b, 0xa0b0, 0xa0b1, 0x8e0c, 0xa0c0, 0xa0c1, 0xa0c2, 0x8e0d, 0xa0d0, 0xa0d1, 0x8e10, 0xa100, 0xa101, 0x8e11, 0xa110, 0xa111, 0xa112, 0x8e12, 0xa120, 0xa121, 0xa122, 0x8e13, 0xa130, 0xa131, 0x8e14, 0xa140, 0xa141, 0x8e15, 0xa150, 0xa151, 0x8e16, 0xa160, 0xa161, 0xa162, 0x8e17, 0xa170, 0xa171, 0xa172, 0x8e18, 0xa180, 0xa181, 0x8e19, 0xa190, 0xa191, 0x8e1a, 0xa1a0, 0xa1a1, 0xa1a2, 0x8e1b, 0xa1b0, 0xa1b1, 0x8e1c, 0xa1c0, 0xa1c1, 0xa1c2, 0x8e1d, 0xa1d0, 0xa1d1, 0x8e20, 0xa200, 0xa201, 0x8e21, 0xa210, 0xa211, 0xa212, 0x8e22, 0xa220, 0xa221, 0xa222, 0x8e23, 0xa230, 0xa231, 0x8e24, 0xa240, 0xa241, 0x8e25, 0xa250, 0xa251, 0x8e26, 0xa260, 0xa261, 0xa262, 0x8e27, 0xa270, 0xa271, 0xa272, 0x8e28, 0xa280, 0xa281, 0x8e29, 0xa290, 0xa291, 0x8e2a, 0xa2a0, 0xa2a1, 0xa2a2, 0x8e2b, 0xa2b0, 0xa2b1, 0x8e2c, 0xa2c0, 0xa2c1, 0xa2c2, 0x8e2d, 0xa2d0, 0xa2d1, 0x8e30, 0xa300, 0xa301, 0x8e31, 0xa310, 0xa311, 0xa312, 0x8e32, 0xa320, 0xa321, 0xa322, 0x8e33, 0xa330, 0xa331, 0x8e34, 0xa340, 0xa341, 0x8e35, 0xa350, 0xa351, 0x8e36, 0xa360, 0xa361, 0xa362, 0x8e37, 0xa370, 0xa371, 0xa372, 0x8e38, 0xa380, 0xa381, 0x8e39, 0xa390, 0xa391, 0x8e3a, 0xa3a0, 0xa3a1, 0xa3a2, 0x8e3b, 0xa3b0, 0xa3b1, 0x8e3c, 0xa3c0, 0xa3c1, 0xa3c2, 0x8e3d, 0xa3d0, 0xa3d1, 0x8e40, 0xa400, 0xa401, 0x8e41, 0xa410, 0xa411, 0xa412, 0x8e42, 0xa420, 0xa421, 0xa422, 0x8e43, 0xa430, 0xa431, 0x8e44, 0xa440, 0xa441, 0x8e45, 0xa450, 0xa451, 0x8e46, 0xa460, 0xa461, 0xa462, 0x8e47, 0xa470, 0xa471, 0xa472, 0x8e48, 0xa480, 0xa481, 0x8e49, 0xa490, 0xa491, 0x8e4a, 0xa4a0, 0xa4a1, 0xa4a2, 0x8e4b, 0xa4b0, 0xa4b1, 0x8e4c, 0xa4c0, 0xa4c1, 0xa4c2, 0x8e4d, 0xa4d0, 0xa4d1, 0x8e50, 0xa500, 0xa501, 0x8e51, 0xa510, 0xa511, 0xa512, 0x8e52, 0xa520, 0xa521, 0xa522, 0x8e53, 0xa530, 0xa531, 0x8e54, 0xa540, 0xa541, 0x8e55, 0xa550, 0xa551, 0x8e56, 0xa560, 0xa561, 0xa562, 0x8e57, 0xa570, 0xa571, 0xa572, 0x8e58, 0xa580, 0xa581, 0x8e59, 0xa590, 0xa591, 0x8e5a, 0xa5a0, 0xa5a1, 0xa5a2, 0x8e5b, 0xa5b0, 0xa5b1, 0x8e5c, 0xa5c0, 0xa5c1, 0xa5c2, 0x8e5d, 0xa5d0, 0xa5d1)); #MDC I
+#
+# push(@mdc_boards,( 0x8e60, 0xa600, 0xa601, 0x8e61, 0xa610, 0xa611, 0x8e62, 0xa620, 0xa621, 0x8e63, 0xa630, 0xa631, 0x8e64, 0xa640, 0xa641, 0x8e65, 0xa650, 0xa651, 0x8e66, 0xa660, 0xa661, 0x8e67, 0xa670, 0xa671, 0x8e68, 0xa680, 0xa681, 0x8e69, 0xa690, 0xa691, 0x8e6a, 0xa6a0, 0xa6a1, 0x8e6b, 0xa6b0, 0xa6b1, 0x8e6c, 0xa6c0, 0xa6c1, 0x8e6d, 0xa6d0, 0xa6d1, 0x8e6e, 0xa6e0, 0xa6e1, 0xa6e2, 0x8e6f, 0xa6f0, 0xa6f1, 0xa6f2, 0x8e70, 0xa700, 0xa701, 0x8e71, 0xa710, 0xa711, 0x8e72, 0xa720, 0xa721, 0x8e73, 0xa730, 0xa731, 0x8e74, 0xa740, 0xa741, 0x8e75, 0xa750, 0xa751, 0x8e76, 0xa760, 0xa761, 0x8e77, 0xa770, 0xa771, 0x8e78, 0xa780, 0xa781, 0x8e79, 0xa790, 0xa791, 0x8e7a, 0xa7a0, 0xa7a1, 0x8e7b, 0xa7b0, 0xa7b1, 0x8e7c, 0xa7c0, 0xa7c1, 0x8e7d, 0xa7d0, 0xa7d1, 0x8e7e, 0xa7e0, 0xa7e1, 0xa7e2, 0x8e7f, 0xa7f0, 0xa7f1, 0xa7f2, 0x8e80, 0xa800, 0xa801, 0x8e81, 0xa810, 0xa811, 0x8e82, 0xa820, 0xa821, 0x8e83, 0xa830, 0xa831, 0x8e84, 0xa840, 0xa841, 0x8e85, 0xa850, 0xa851, 0x8e86, 0xa860, 0xa861, 0x8e87, 0xa870, 0xa871, 0x8e88, 0xa880, 0xa881, 0x8e89, 0xa890, 0xa891, 0x8e8a, 0xa8a0, 0xa8a1, 0x8e8b, 0xa8b0, 0xa8b1, 0x8e8c, 0xa8c0, 0xa8c1, 0x8e8d, 0xa8d0, 0xa8d1, 0x8e8e, 0xa8e0, 0xa8e1, 0xa8e2, 0x8e8f, 0xa8f0, 0xa8f1, 0xa8f2, 0x8e90, 0xa900, 0xa901, 0x8e91, 0xa910, 0xa911, 0x8e92, 0xa920, 0xa921, 0x8e93, 0xa930, 0xa931, 0x8e94, 0xa940, 0xa941, 0x8e95, 0xa950, 0xa951, 0x8e96, 0xa960, 0xa961, 0x8e97, 0xa970, 0xa971, 0x8e98, 0xa980, 0xa981, 0x8e99, 0xa990, 0xa991, 0x8e9a, 0xa9a0, 0xa9a1, 0x8e9b, 0xa9b0, 0xa9b1, 0x8e9c, 0xa9c0, 0xa9c1, 0x8e9d, 0xa9d0, 0xa9d1, 0x8e9e, 0xa9e0, 0xa9e1, 0xa9e2, 0x8e9f, 0xa9f0, 0xa9f1, 0xa9f2, 0x8ea0, 0xaa00, 0xaa01, 0x8ea1, 0xaa10, 0xaa11, 0x8ea2, 0xaa20, 0xaa21, 0x8ea3, 0xaa30, 0xaa31, 0x8ea4, 0xaa40, 0xaa41, 0x8ea5, 0xaa50, 0xaa51, 0x8ea6, 0xaa60, 0xaa61, 0x8ea7, 0xaa70, 0xaa71, 0x8ea8, 0xaa80, 0xaa81, 0x8ea9, 0xaa90, 0xaa91, 0x8eaa, 0xaaa0, 0xaaa1, 0x8eab, 0xaab0, 0xaab1, 0x8eac, 0xaac0, 0xaac1, 0x8ead, 0xaad0, 0xaad1, 0x8eae, 0xaae0, 0xaae1, 0xaae2, 0x8eaf, 0xaaf0, 0xaaf1, 0xaaf2, 0x8eb0, 0xab00, 0xab01, 0x8eb1, 0xab10, 0xab11, 0x8eb2, 0xab20, 0xab21, 0x8eb3, 0xab30, 0xab31, 0x8eb4, 0xab40, 0xab41, 0x8eb5, 0xab50, 0xab51, 0x8eb6, 0xab60, 0xab61, 0x8eb7, 0xab70, 0xab71, 0x8eb8, 0xab80, 0xab81, 0x8eb9, 0xab90, 0xab91, 0x8eba, 0xaba0, 0xaba1, 0x8ebb, 0xabb0, 0xabb1, 0x8ebc, 0xabc0, 0xabc1, 0x8ebd, 0xabd0, 0xabd1, 0x8ebe, 0xabe0, 0xabe1, 0xabe2, 0x8ebf, 0xabf0, 0xabf1, 0xabf2)); #MDC II
-push(@mdc_boards,( 0x8e00, 0xa000, 0xa001, 0x8e01, 0xa010, 0xa011, 0xa012, 0x8e02, 0xa020, 0xa021, 0xa022, 0x8e03, 0xa030, 0xa031, 0x8e04, 0xa040, 0xa041, 0x8e05, 0xa050, 0xa051, 0x8e06, 0xa060, 0xa061, 0xa062, 0x8e07, 0xa070, 0xa071, 0xa072, 0x8e08, 0xa080, 0xa081, 0x8e09, 0xa090, 0xa091, 0x8e0a, 0xa0a0, 0xa0a1, 0xa0a2, 0x8e0b, 0xa0b0, 0xa0b1, 0x8e0c, 0xa0c0, 0xa0c1, 0xa0c2, 0x8e0d, 0xa0d0, 0xa0d1, 0x8e10, 0xa100, 0xa101, 0x8e11, 0xa110, 0xa111, 0xa112, 0x8e12, 0xa120, 0xa121, 0xa122, 0x8e13, 0xa130, 0xa131, 0x8e14, 0xa140, 0xa141, 0x8e15, 0xa150, 0xa151, 0x8e16, 0xa160, 0xa161, 0xa162, 0x8e17, 0xa170, 0xa171, 0xa172, 0x8e18, 0xa180, 0xa181, 0x8e19, 0xa190, 0xa191, 0x8e1a, 0xa1a0, 0xa1a1, 0xa1a2, 0x8e1b, 0xa1b0, 0xa1b1, 0x8e1c, 0xa1c0, 0xa1c1, 0xa1c2, 0x8e1d, 0xa1d0, 0xa1d1, 0x8e20, 0xa200, 0xa201, 0x8e21, 0xa210, 0xa211, 0xa212, 0x8e22, 0xa220, 0xa221, 0xa222, 0x8e23, 0xa230, 0xa231, 0x8e24, 0xa240, 0xa241, 0x8e25, 0xa250, 0xa251, 0x8e26, 0xa260, 0xa261, 0xa262, 0x8e27, 0xa270, 0xa271, 0xa272, 0x8e28, 0xa280, 0xa281, 0x8e29, 0xa290, 0xa291, 0x8e2a, 0xa2a0, 0xa2a1, 0xa2a2, 0x8e2b, 0xa2b0, 0xa2b1, 0x8e2c, 0xa2c0, 0xa2c1, 0xa2c2, 0x8e2d, 0xa2d0, 0xa2d1, 0x8e30, 0xa300, 0xa301, 0x8e31, 0xa310, 0xa311, 0xa312, 0x8e32, 0xa320, 0xa321, 0xa322, 0x8e33, 0xa330, 0xa331, 0x8e34, 0xa340, 0xa341, 0x8e35, 0xa350, 0xa351, 0x8e36, 0xa360, 0xa361, 0xa362, 0x8e37, 0xa370, 0xa371, 0xa372, 0x8e38, 0xa380, 0xa381, 0x8e39, 0xa390, 0xa391, 0x8e3a, 0xa3a0, 0xa3a1, 0xa3a2, 0x8e3b, 0xa3b0, 0xa3b1, 0x8e3c, 0xa3c0, 0xa3c1, 0xa3c2, 0x8e3d, 0xa3d0, 0xa3d1, 0x8e40, 0xa400, 0xa401, 0x8e41, 0xa410, 0xa411, 0xa412, 0x8e42, 0xa420, 0xa421, 0xa422, 0x8e43, 0xa430, 0xa431, 0x8e44, 0xa440, 0xa441, 0x8e45, 0xa450, 0xa451, 0x8e46, 0xa460, 0xa461, 0xa462, 0x8e47, 0xa470, 0xa471, 0xa472, 0x8e48, 0xa480, 0xa481, 0x8e49, 0xa490, 0xa491, 0x8e4a, 0xa4a0, 0xa4a1, 0xa4a2, 0x8e4b, 0xa4b0, 0xa4b1, 0x8e4c, 0xa4c0, 0xa4c1, 0xa4c2, 0x8e4d, 0xa4d0, 0xa4d1, 0x8e50, 0xa500, 0xa501, 0x8e51, 0xa510, 0xa511, 0xa512, 0x8e52, 0xa520, 0xa521, 0xa522, 0x8e53, 0xa530, 0xa531, 0x8e54, 0xa540, 0xa541, 0x8e55, 0xa550, 0xa551, 0x8e56, 0xa560, 0xa561, 0xa562, 0x8e57, 0xa570, 0xa571, 0xa572, 0x8e58, 0xa580, 0xa581, 0x8e59, 0xa590, 0xa591, 0x8e5a, 0xa5a0, 0xa5a1, 0xa5a2, 0x8e5b, 0xa5b0, 0xa5b1, 0x8e5c, 0xa5c0, 0xa5c1, 0xa5c2, 0x8e5d, 0xa5d0, 0xa5d1)); #MDC I
-
-push(@mdc_boards,( 0x8e60, 0xa600, 0xa601, 0x8e61, 0xa610, 0xa611, 0x8e62, 0xa620, 0xa621, 0x8e63, 0xa630, 0xa631, 0x8e64, 0xa640, 0xa641, 0x8e65, 0xa650, 0xa651, 0x8e66, 0xa660, 0xa661, 0x8e67, 0xa670, 0xa671, 0x8e68, 0xa680, 0xa681, 0x8e69, 0xa690, 0xa691, 0x8e6a, 0xa6a0, 0xa6a1, 0x8e6b, 0xa6b0, 0xa6b1, 0x8e6c, 0xa6c0, 0xa6c1, 0x8e6d, 0xa6d0, 0xa6d1, 0x8e6e, 0xa6e0, 0xa6e1, 0xa6e2, 0x8e6f, 0xa6f0, 0xa6f1, 0xa6f2, 0x8e70, 0xa700, 0xa701, 0x8e71, 0xa710, 0xa711, 0x8e72, 0xa720, 0xa721, 0x8e73, 0xa730, 0xa731, 0x8e74, 0xa740, 0xa741, 0x8e75, 0xa750, 0xa751, 0x8e76, 0xa760, 0xa761, 0x8e77, 0xa770, 0xa771, 0x8e78, 0xa780, 0xa781, 0x8e79, 0xa790, 0xa791, 0x8e7a, 0xa7a0, 0xa7a1, 0x8e7b, 0xa7b0, 0xa7b1, 0x8e7c, 0xa7c0, 0xa7c1, 0x8e7d, 0xa7d0, 0xa7d1, 0x8e7e, 0xa7e0, 0xa7e1, 0xa7e2, 0x8e7f, 0xa7f0, 0xa7f1, 0xa7f2, 0x8e80, 0xa800, 0xa801, 0x8e81, 0xa810, 0xa811, 0x8e82, 0xa820, 0xa821, 0x8e83, 0xa830, 0xa831, 0x8e84, 0xa840, 0xa841, 0x8e85, 0xa850, 0xa851, 0x8e86, 0xa860, 0xa861, 0x8e87, 0xa870, 0xa871, 0x8e88, 0xa880, 0xa881, 0x8e89, 0xa890, 0xa891, 0x8e8a, 0xa8a0, 0xa8a1, 0x8e8b, 0xa8b0, 0xa8b1, 0x8e8c, 0xa8c0, 0xa8c1, 0x8e8d, 0xa8d0, 0xa8d1, 0x8e8e, 0xa8e0, 0xa8e1, 0xa8e2, 0x8e8f, 0xa8f0, 0xa8f1, 0xa8f2, 0x8e90, 0xa900, 0xa901, 0x8e91, 0xa910, 0xa911, 0x8e92, 0xa920, 0xa921, 0x8e93, 0xa930, 0xa931, 0x8e94, 0xa940, 0xa941, 0x8e95, 0xa950, 0xa951, 0x8e96, 0xa960, 0xa961, 0x8e97, 0xa970, 0xa971, 0x8e98, 0xa980, 0xa981, 0x8e99, 0xa990, 0xa991, 0x8e9a, 0xa9a0, 0xa9a1, 0x8e9b, 0xa9b0, 0xa9b1, 0x8e9c, 0xa9c0, 0xa9c1, 0x8e9d, 0xa9d0, 0xa9d1, 0x8e9e, 0xa9e0, 0xa9e1, 0xa9e2, 0x8e9f, 0xa9f0, 0xa9f1, 0xa9f2, 0x8ea0, 0xaa00, 0xaa01, 0x8ea1, 0xaa10, 0xaa11, 0x8ea2, 0xaa20, 0xaa21, 0x8ea3, 0xaa30, 0xaa31, 0x8ea4, 0xaa40, 0xaa41, 0x8ea5, 0xaa50, 0xaa51, 0x8ea6, 0xaa60, 0xaa61, 0x8ea7, 0xaa70, 0xaa71, 0x8ea8, 0xaa80, 0xaa81, 0x8ea9, 0xaa90, 0xaa91, 0x8eaa, 0xaaa0, 0xaaa1, 0x8eab, 0xaab0, 0xaab1, 0x8eac, 0xaac0, 0xaac1, 0x8ead, 0xaad0, 0xaad1, 0x8eae, 0xaae0, 0xaae1, 0xaae2, 0x8eaf, 0xaaf0, 0xaaf1, 0xaaf2, 0x8eb0, 0xab00, 0xab01, 0x8eb1, 0xab10, 0xab11, 0x8eb2, 0xab20, 0xab21, 0x8eb3, 0xab30, 0xab31, 0x8eb4, 0xab40, 0xab41, 0x8eb5, 0xab50, 0xab51, 0x8eb6, 0xab60, 0xab61, 0x8eb7, 0xab70, 0xab71, 0x8eb8, 0xab80, 0xab81, 0x8eb9, 0xab90, 0xab91, 0x8eba, 0xaba0, 0xaba1, 0x8ebb, 0xabb0, 0xabb1, 0x8ebc, 0xabc0, 0xabc1, 0x8ebd, 0xabd0, 0xabd1, 0x8ebe, 0xabe0, 0xabe1, 0xabe2, 0x8ebf, 0xabf0, 0xabf1, 0xabf2)); #MDC II
+push(@mdc_boards,(
+
+
+#0x8580, 0x8581, 0x8582, 0x8583,
+#0x8f00, 0xb000, 0xb001, 0xb002, 0x8f01, 0xb010, 0xb011, 0x8f02, 0xb020, 0xb021, 0x8f03, 0xb030, 0xb031, 0x8f04, 0xb040, 0xb041, 0x8f05, 0xb050, 0xb051, 0xb052, 0x8f06, 0xb060, 0xb061, 0xb062, 0x8f07, 0xb070, 0xb071, 0x8f08, 0xb080, 0xb081, 0x8f09, 0xb090, 0xb091, 0x8f0a, 0xb0a0, 0xb0a1, 0x8f0b, 0xb0b0, 0xb0b1, 0xb0b2, 0x8f0c, 0xb0c0, 0xb0c1, 0x8f0d, 0xb0d0, 0xb0d1, 0xb0d2, 0x8f0e, 0xb0e0, 0xb0e1, 0xb0e2, 0x8f0f, 0xb0f0, 0xb0f1, 0x8f60, 0xb600, 0xb601, 0x8f61, 0xb610, 0xb611, 0x8f62, 0xb620, 0xb621, 0x8f63, 0xb630, 0xb631, 0xb632, 0x8f64, 0xb640, 0xb641, 0xb642, 0x8f65, 0xb650, 0xb651, 0x8f66, 0xb660, 0xb661, 0x8f67, 0xb670, 0xb671, 0x8f68, 0xb680, 0xb681, 0x8f69, 0xb690, 0xb691, 0xb692, 0x8f6a, 0xb6a0, 0xb6a1, 0xb6a2, 0x8f6b, 0xb6b0, 0xb6b1, 0x8f6c, 0xb6c0, 0xb6c1, 0x8f6d, 0xb6d0, 0xb6d1, 0xb6d2, 0x8f6e, 0xb6e0, 0xb6e1, 0xb6e2, 0x8f6f, 0xb6f0, 0xb6f1, #MDC 3/4 sec. 0
+
+
+#0x8570, 0x8571, 0x8572, 0x8573,
+#0x8f10, 0xb100, 0xb101, 0xb102, 0x8f11, 0xb110, 0xb111, 0x8f12, 0xb120, 0xb121, 0x8f13, 0xb130, 0xb131, 0x8f14, 0xb140, 0xb141, 0x8f15, 0xb150, 0xb151, 0xb152, 0x8f16, 0xb160, 0xb161, 0xb162, 0x8f17, 0xb170, 0xb171, 0x8f18, 0xb180, 0xb181, 0x8f19, 0xb190, 0xb191, 0x8f1a, 0xb1a0, 0xb1a1, 0x8f1b, 0xb1b0, 0xb1b1, 0xb1b2, 0x8f1c, 0xb1c0, 0xb1c1, 0x8f1d, 0xb1d0, 0xb1d1, 0xb1d2, 0x8f1e, 0xb1e0, 0xb1e1, 0xb1e2, 0x8f1f, 0xb1f0, 0xb1f1, 0x8f70, 0xb700, 0xb701, 0x8f71, 0xb710, 0xb711, 0x8f72, 0xb720, 0xb721, 0x8f73, 0xb730, 0xb731, 0xb732, 0x8f74, 0xb740, 0xb741, 0xb742, 0x8f75, 0xb750, 0xb751, 0x8f76, 0xb760, 0xb761, 0x8f77, 0xb770, 0xb771, 0x8f78, 0xb780, 0xb781, 0x8f79, 0xb790, 0xb791, 0xb792, 0x8f7a, 0xb7a0, 0xb7a1, 0xb7a2, 0x8f7b, 0xb7b0, 0xb7b1, 0x8f7c, 0xb7c0, 0xb7c1, 0x8f7d, 0xb7d0, 0xb7d1, 0xb7d2, 0x8f7e, 0xb7e0, 0xb7e1, 0xb7e2, 0x8f7f, 0xb7f0, 0xb7f1, #MDC 3/4 sec. 1
+
+
+0x8580, 0x8581, 0x8582, 0x8582,
+0x8f20, 0xb200, 0xb201, 0xb202, 0x8f21, 0xb210, 0xb211, 0x8f22, 0xb220, 0xb221, 0x8f23, 0xb230, 0xb231, 0x8f24, 0xb240, 0xb241, 0x8f25, 0xb250, 0xb251, 0xb252, 0x8f26, 0xb260, 0xb261, 0xb262, 0x8f27, 0xb270, 0xb271, 0x8f28, 0xb280, 0xb281, 0x8f29, 0xb290, 0xb291, 0x8f2a, 0xb2a0, 0xb2a1, 0x8f2b, 0xb2b0, 0xb2b1, 0xb2b2, 0x8f2c, 0xb2c0, 0xb2c1, 0x8f2d, 0xb2d0, 0xb2d1, 0xb2d2, 0x8f2e, 0xb2e0, 0xb2e1, 0xb2e2, 0x8f2f, 0xb2f0, 0xb2f1, 0x8f80, 0xb800, 0xb801, 0x8f81, 0xb810, 0xb811, 0x8f82, 0xb820, 0xb821, 0x8f83, 0xb830, 0xb831, 0xb832, 0x8f84, 0xb840, 0xb841, 0xb842, 0x8f85, 0xb850, 0xb851, 0x8f86, 0xb860, 0xb861, 0x8f87, 0xb870, 0xb871, 0x8f88, 0xb880, 0xb881, 0x8f89, 0xb890, 0xb891, 0xb892, 0x8f8a, 0xb8a0, 0xb8a1, 0xb8a2, 0x8f8b, 0xb8b0, 0xb8b1, 0x8f8c, 0xb8c0, 0xb8c1, 0x8f8d, 0xb8d0, 0xb8d1, 0xb8d2, 0x8f8e, 0xb8e0, 0xb8e1, 0xb8e2, 0x8f8f, 0xb8f0, 0xb8f1, #MDC 3/4 sec. 2
+
+0x8590, 0x8591, 0x8592, 0x8593,
+0x8f30, 0xb300, 0xb301, 0xb302, 0x8f31, 0xb310, 0xb311, 0x8f32, 0xb320, 0xb321, 0x8f33, 0xb330, 0xb331, 0x8f34, 0xb340, 0xb341, 0x8f35, 0xb350, 0xb351, 0xb352, 0x8f36, 0xb360, 0xb361, 0xb362, 0x8f37, 0xb370, 0xb371, 0x8f38, 0xb380, 0xb381, 0x8f39, 0xb390, 0xb391, 0x8f3a, 0xb3a0, 0xb3a1, 0x8f3b, 0xb3b0, 0xb3b1, 0xb3b2, 0x8f3c, 0xb3c0, 0xb3c1, 0x8f3d, 0xb3d0, 0xb3d1, 0xb3d2, 0x8f3e, 0xb3e0, 0xb3e1, 0xb3e2, 0x8f3f, 0xb3f0, 0xb3f1, 0x8f90, 0xb900, 0xb901, 0x8f91, 0xb910, 0xb911, 0x8f92, 0xb920, 0xb921, 0x8f93, 0xb930, 0xb931, 0xb932, 0x8f94, 0xb940, 0xb941, 0xb942, 0x8f95, 0xb950, 0xb951, 0x8f96, 0xb960, 0xb961, 0x8f97, 0xb970, 0xb971, 0x8f98, 0xb980, 0xb981, 0x8f99, 0xb990, 0xb991, 0xb992, 0x8f9a, 0xb9a0, 0xb9a1, 0xb9a2, 0x8f9b, 0xb9b0, 0xb9b1, 0x8f9c, 0xb9c0, 0xb9c1, 0x8f9d, 0xb9d0, 0xb9d1, 0xb9d2, 0x8f9e, 0xb9e0, 0xb9e1, 0xb9e2, 0x8f9f, 0xb9f0, 0xb9f1, #MDC 3/4 sec. 3
+
+0x85a0, 0x85a1, 0x85a2, 0x85a3,
+0x8f40, 0xb400, 0xb401, 0xb402, 0x8f41, 0xb410, 0xb411, 0x8f42, 0xb420, 0xb421, 0x8f43, 0xb430, 0xb431, 0x8f44, 0xb440, 0xb441, 0x8f45, 0xb450, 0xb451, 0xb452, 0x8f46, 0xb460, 0xb461, 0xb462, 0x8f47, 0xb470, 0xb471, 0x8f48, 0xb480, 0xb481, 0x8f49, 0xb490, 0xb491, 0x8f4a, 0xb4a0, 0xb4a1, 0x8f4b, 0xb4b0, 0xb4b1, 0xb4b2, 0x8f4c, 0xb4c0, 0xb4c1, 0x8f4d, 0xb4d0, 0xb4d1, 0xb4d2, 0x8f4e, 0xb4e0, 0xb4e1, 0xb4e2, 0x8f4f, 0xb4f0, 0xb4f1, 0x8fa0, 0xba00, 0xba01, 0x8fa1, 0xba10, 0xba11, 0x8fa2, 0xba20, 0xba21, 0x8fa3, 0xba30, 0xba31, 0xba32, 0x8fa4, 0xba40, 0xba41, 0xba42, 0x8fa5, 0xba50, 0xba51, 0x8fa6, 0xba60, 0xba61, 0x8fa7, 0xba70, 0xba71, 0x8fa8, 0xba80, 0xba81, 0x8fa9, 0xba90, 0xba91, 0xba92, 0x8faa, 0xbaa0, 0xbaa1, 0xbaa2, 0x8fab, 0xbab0, 0xbab1, 0x8fac, 0xbac0, 0xbac1, 0x8fad, 0xbad0, 0xbad1, 0xbad2, 0x8fae, 0xbae0, 0xbae1, 0xbae2, 0x8faf, 0xbaf0, 0xbaf1, #MDC 3/4 sec. 4
+
+#0x85b0, 0x85b1, 0x85b2, 0x85b3,
+#0x8f50, 0xb500, 0xb501, 0xb502, 0x8f51, 0xb510, 0xb511, 0x8f52, 0xb520, 0xb521, 0x8f53, 0xb530, 0xb531, 0x8f54, 0xb540, 0xb541, 0x8f55, 0xb550, 0xb551, 0xb552, 0x8f56, 0xb560, 0xb561, 0xb562, 0x8f57, 0xb570, 0xb571, 0x8f58, 0xb580, 0xb581, 0x8f59, 0xb590, 0xb591, 0x8f5a, 0xb5a0, 0xb5a1, 0x8f5b, 0xb5b0, 0xb5b1, 0xb5b2, 0x8f5c, 0xb5c0, 0xb5c1, 0x8f5d, 0xb5d0, 0xb5d1, 0xb5d2, 0x8f5e, 0xb5e0, 0xb5e1, 0xb5e2, 0x8f5f, 0xb5f0, 0xb5f1, 0x8fb0, 0xbb00, 0xbb01, 0x8fb1, 0xbb10, 0xbb11, 0x8fb2, 0xbb20, 0xbb21, 0x8fb3, 0xbb30, 0xbb31, 0xbb32, 0x8fb4, 0xbb40, 0xbb41, 0xbb42, 0x8fb5, 0xbb50, 0xbb51, 0x8fb6, 0xbb60, 0xbb61, 0x8fb7, 0xbb70, 0xbb71, 0x8fb8, 0xbb80, 0xbb81, 0x8fb9, 0xbb90, 0xbb91, 0xbb92, 0x8fba, 0xbba0, 0xbba1, 0xbba2, 0x8fbb, 0xbbb0, 0xbbb1, 0x8fbc, 0xbbc0, 0xbbc1, 0x8fbd, 0xbbd0, 0xbbd1, 0xbbd2, 0x8fbe, 0xbbe0, 0xbbe1, 0xbbe2, 0x8fbf, 0xbbf0, 0xbbf1, #MDC 3/4 sec. 5
+));
my $totalboards = scalar @mdc_boards;
my $removedboards = scalar @QA::mdc_new_boards_removed;
my $missingboards;
Hmon::Speak('mdcmissonce',"$missing_number new M-D-C Frontends missing") if($qastate > 60 && $qastate < QA::ERROR );
Hmon::Speak('mdcmiss',"$missing_number new M-D-C Frontends missing") if($qastate >= QA::ERROR );
-QA::WriteQALog($flog,"endp","mdc12",10,$qastate,"MDC 1/2",$value,$longtext);
+QA::WriteQALog($flog,"endp","mdc12",10,$qastate,"MDC",$value,$longtext);
sleep(5);
}
while (1) {
my $store;
- my $boards = trb_register_read(0xfffb,0) or sleep 5 and next;
+ my $boards = trb_register_read(0xfffb,0); # or sleep 5 and next;
# print Dumper $boards;
- for (my $l = 0; $l < 2;$l++) {
+ for (my $l = 0; $l < 4;$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)};
my $cnt = 0;
- my $page = Hmon::MakeTitle(10, 6, "MDCnew Missing");
+ my $page = Hmon::MakeTitle(9, 10, "MDCnew Missing");
my ($color,$raw);
- for (my $l = 0; $l < 2;$l++) {
+ for (my $l = 0; $l < 4;$l++) {
$page .= "<p>";
for (my $s = 0; $s < 6;$s++) {
for (my $b = 0; $b < 16; $b++) {
file => "files/MdcRate",
title => "MDC Rate",
entries => 96,
- curves => 240,
+ curves => 480,
type => HPlot::TYPE_HEATMAP,
output => HPlot::OUT_PNG,
zlabel => "Hitrate",
sizex => 510,
- sizey => 810,
+ sizey => 1170,
nokey => 1,
buffer => 1,
- ymin => 239.5,
+ ymin => 479.5,
ymax => -0.5,
xmin => -0.5,
xmax => 95.5,
cbmax => "1000<*<1E6",
cbmin => 0,
noinit => 1,
- additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208); set grid xtics front; set ytics scale 0;",
+ additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208,'III0' 248,'III2' 288,'III4' 328,'IV0' 368,'IV2' 408,'IV4' 448); set grid xtics front; set ytics scale 0;",
showvalues => 0,
});
file => "files/MdcSpikeRate",
title => "MDC Spike Rate",
entries => 96,
- curves => 240,
+ curves => 480,
type => HPlot::TYPE_HEATMAP,
output => HPlot::OUT_PNG,
zlabel => "Hitrate",
sizex => 510,
- sizey => 810,
+ sizey => 1170,
nokey => 1,
buffer => 1,
- ymin => 239.5,
+ ymin => 479.5,
ymax => -0.5,
xmin => -0.5,
xmax => 95.5,
cbmax => "1000<*<1E6",
cbmin => 0,
noinit => 1,
- additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208); set grid xtics front; set ytics scale 0;",
+ additional => "set logscale cb;set format cb \"_{10}{\%L}\";set xtics ('0' -0.5, '16' 15.5, '32' 31.5, '48' 47.5, '64' 63.5, '80' 79.5); set ytics ('I0' 8,'I2' 48,'I4' 88,'II0' 128,'II2' 168,'II4' 208,'III0' 248,'III2' 288,'III4' 328,'IV0' 368,'IV2' 408,'IV4' 448); set grid xtics front; set ytics scale 0;",
showvalues => 0,
});
});
-my $str = Hmon::MakeTitle(13, 17, "MDC Saved Hit Rate / MDC Spike Rate",0);
+my $str = Hmon::MakeTitle(13, 24, "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();
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;
+ my $o->[0] = trb_register_read_mem(0xfe91,0xc120,0,32) 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;
+ $o->[1] = trb_register_read_mem(0xfe91,0xc100,0,32) 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;
+ $o->[2] = trb_register_read_mem(0xfe91,0xdfc0,0,32) or sleep 5 and next;
if (defined $old) {
foreach my $b (keys %{$o->[0]}) {
}
($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][4] = Hmon::MakeTitle(9, 10, "MDC Temperatures");
+ for (my $l = 0; $l < 4;$l++) {
# $str[0][$l] = Hmon::MakeTitle(9, 3, "MDC $l Temperatures");
$str[1][$l] = "";
for (my $s = 0; $s < 6;$s++) {
}
$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]);
+ Hmon::WriteFile("MDCNewTemperature",$str[0][4]."<p>".$str[1][0]."<p>".$str[1][1]."<p>".$str[1][2]."<p>".$str[1][3]."<p>".$str[2][0]);#."<p>".$str[1][2]."<p>".$str[1][3].$str[2][0]);
$store = {};
}
$page .= Hmon::MakeFooter();
- Hmon::WriteFile("MDCNewVoltage",$page);
+ Hmon::WriteFile("MDCNewVoltage12",$page);
+
+#####Repeat for MDC III/IV
+ $cnt = 0;
+ $page = Hmon::MakeTitle(9, 21, "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 = 2; $l < 4;$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("MDCNewVoltage34",$page);
+
+
sleep 30;
</ul></div>
<div class="linkbox" style="float:right"><h4>Documents</h4><ul>
-<li><a href="https://hessenbox-a10.rz.uni-frankfurt.de/getlink/fiFyuhGJXrwV1dPs5RebuW/HadesOperatorManual.pdf" style="color:#d33">Operator manual</a>
-<li><a href="https://hessenbox-a10.rz.uni-frankfurt.de/getlink/fiRhk3zAKorCqtPgXk7hpa/">Document Repository</a>
-<li><a href="https://hessenbox-a10.rz.uni-frankfurt.de/getlink/fiHTFzB5jN8CgPNMjvzn83/networkaddresses.pdf">DAQ FEE Addresses</a>
-<!--<li><a href="https://hessenbox-a10.rz.uni-frankfurt.de/getlink/fiGgg6c7AhGjD2rnVAxfD7/PhoneNumbers.jpg">Phone Numbers</a>-->
+<li><a href="https://next.hessenbox.de/index.php/s/39F7gsaEP2KwAW2" target="_blank" style="color:#d33">Operator manual</a>
+<li><a href="https://next.hessenbox.de/index.php/s/QEyRBJ2oENZaDP7" target="_blank" >Document Repository</a>
+<li><a href="https://next.hessenbox.de/index.php/s/mqrC3QFAJ8gPMD5" target="_blank" >DAQ FEE Addresses</a>
<li><a href="https://hades-db.gsi.de/pls/hades_webdbs/hades_oper.hlogbook2.form_selection">Beamtime Logbook</a></li>
<li><a href="/mon/monitor.cgi?30-window-ExpertsOnCall" style="color:#d33">Experts on Shift</a></li>
<li><a href="https://hades-db.gsi.de/pls/hades_webdbs/hades_oper.hshiftcrews2.form_select">Shift Plan (Oracle)</a></li>
</ul></div>
<div class="linkbox" style="clear:both;width:730px;"><h4>Other Resources</h4><ul>
-<li><a href="/mon/qawindows" target="_blank">QA Windows as on main screen (web-based)</a>
-<li><a href="/qaweb/?layout=tabs&monitoring=2000" target="_blank">All QA Plots (web-based)</a>
+<li><a href="/qaweb/htdocs/index.htm" target="_blank" style="color:#d33">Online QA </a>
+<!--<li><a href="/qaweb/?layout=tabs&monitoring=2000" target="_blank">All QA Plots (web-based)</a>-->
<li><a href="/mon/qa?C=M;O=D">QA Plot Archive (updated every 15 minutes)</a></li>
<li><a href="files/vertex.htm">Vertex Plots (updated after each file)</a></li>
<!--<li class="outdated"><a href="../spillmon/?browser=no&monitoring=1000&layout=grid4x4&items=[%22EventBuilder/Run/HLD/HLD_HitsFast%22,%22EventBuilder/Run/HLD/HLD_HitsSlow%22,%22EventBuilder/Run/HLD/HLD_TrendX%22,%22EventBuilder/Run/HLD/HLD_TrendY%22,%22EventBuilder/Run/HLD/HLD_BeamX%22,%22EventBuilder/Run/HLD/HLD_BeamY%22,%22EventBuilder/Run/HLD/HLD_VETO_Patt%22,%22EventBuilder/Run/HLD/HLD_QSlow%22,%22EventBuilder/Run/HLD/HLD_HALO_Patt%22,%22EventBuilder/Run/HLD/HLD_XHALOSlow%22,%22EventBuilder/Run/HLD/HLD_YHALOSlow%22,%22EventBuilder/Run/HLD/HLD_LastSpill_Q_factor%22]">Beam Properties</a></li>-->
--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Time::HiRes qw( gettimeofday usleep time );
+use POSIX qw(strftime);
+use FileHandle;
+use Data::Dumper;
+use POSIX qw/floor ceil/;
+use List::Util qw/min max/;
+use Hmon;
+use QA;
+use Perl2Epics;
+
+my @channels;
+my $s;
+
+for(my $i = 1; $i <= 144; $i++) {
+ next if ($i == 66 || $i == 67 || $i == 78 || $i == 79);
+ $s = "HAD:FWALL:HV:S$i:pwonff";
+ Perl2Epics::Connect("$i",$s);
+ push(@channels,"$i");
+ }
+
+for(my $i = 145; $i <= 208; $i++) {
+ $s = "HAD:FWALL:HV:M$i:pwonff";
+ Perl2Epics::Connect("$i",$s);
+ push(@channels,"$i");
+ }
+
+for(my $i = 211; $i <= 302; $i++) {
+ next if ($i == 218 || $i == 219 || $i == 220 || $i == 230);
+ next if ($i == 283 || $i == 293 || $i == 294 || $i == 295);
+ $s = "HAD:FWALL:HV:L$i:pwonff";
+ Perl2Epics::Connect("$i",$s);
+ push(@channels,"$i");
+ }
+
+
$plot->{sizex} = 630;
$plot->{sizey} = 220;
$plot->{ymin} = 12;
-$plot->{ymax} = 26;
+$plot->{ymax} = "30<*";
$plot->{xscale} = 10;
$plot->{nokey} = 1;
$plot->{buffer} = 1;
--- /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 qw'max min';
+use IO::Socket;
+use IO::Handle;
+# use Perl2Epics;
+use Encode qw(encode from_to);
+use JSON::XS;
+use Hmon;
+use QA;
+use HPlot;
+use Perl2Epics;
+
+my $fqa = QA::OpenQAFile();
+$ENV{EPICS_CA_AUTO_ADDR_LIST} = 'YES';
+ Perl2Epics::Connect("CH_T","HAD:CountingHouse:T:0");
+
+
+my $plot = ();
+$plot->{name} = "Envtemp";
+$plot->{file} = "files/Environment_CH_temp";
+$plot->{entries} = 2400;
+$plot->{type} = HPlot::TYPE_HISTORY;
+$plot->{output} = HPlot::OUT_PNG;
+$plot->{titles}->[0] = "Temperature";
+$plot->{xlabel} = "Minutes";
+$plot->{ylabel} = "°C";
+$plot->{sizex} = 630;
+$plot->{sizey} = 220;
+$plot->{ymin} = 15;
+$plot->{ymax} = "30<*";
+$plot->{xscale} = 3;
+$plot->{nokey} = 1;
+$plot->{buffer} = 1;
+$plot->{storable} = 1;
+$plot->{curves} = 1;
+
+my $plot2 = ();
+$plot2->{name} = "Envhum";
+$plot2->{file} = "files/Environment_CH_hum";
+$plot2->{entries} = 2400;
+$plot2->{type} = HPlot::TYPE_HISTORY;
+$plot2->{output} = HPlot::OUT_PNG;
+$plot2->{titles}->[0] = "Temperature";
+$plot2->{titles}->[1] = "rel. humidity";
+$plot2->{xlabel} = "Minutes";
+$plot2->{ylabel} = "%";
+$plot2->{sizex} = 630;
+$plot2->{sizey} = 220;
+$plot2->{ymin} = 10;
+$plot2->{ymax} = 60;
+$plot2->{xscale} = 3;
+$plot2->{nokey} = 1;
+$plot2->{buffer} = 1;
+$plot2->{storable} = 1;
+$plot2->{curves} = 1;
+
+HPlot::PlotInit($plot);
+HPlot::PlotInit($plot2);
+
+HPlot::PlotInit({
+ name => "Envpres",
+ file => "files/Environment_CH_pres",
+ entries => 2400,
+ type => HPlot::TYPE_HISTORY,
+ output => HPlot::OUT_PNG,
+ titles => ["Pressure"],
+ xlabel => "Minutes",
+ ylabel => "Pressure [mbar]",
+ sizex => 630,
+ sizey => 220,
+ ymin => "970",
+ ymax => "1030",
+ curves => 1,
+ xscale => 3,
+ buffer => 1,
+ storable=> 1,
+ nokey => 1,
+ });
+
+my $str = Hmon::MakeTitle(8,15,"Environment Counting House",0);
+$str .= qq@<img src="%ADDPNG files/Environment_CH_temp.png%" type="image/png"><br>\n@;
+$str .= qq@<img src="%ADDPNG files/Environment_CH_hum.png%" type="image/png"><br>\n@;
+$str .= qq@<img src="%ADDPNG files/Environment_CH_pres.png%" type="image/png">@;
+$str .= Hmon::MakeFooter();
+Hmon::WriteFile("Environment_CH",$str);
+
+while (1) {{
+# system("date");
+ my $data = Perl2Epics::GetAll();
+
+ my $port = IO::Socket::INET->new(PeerAddr => "esp264", 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>) {
+ my $s = $_;
+
+ $mx = $1 if $s =~ /^M_05_0_X\s([-0-9\.]+)/;
+ $my = $1 if $s =~ /^M_05_0_Y\s([-0-9\.]+)/;
+ $mz = $1 if $s =~ /^M_05_0_Z\s([-0-9\.]+)/;
+
+ if ($s =~ /^Temp: ([-0-9\.]+) Pres: ([-0-9\.]+) Humid: ([-0-9\.]+)/) {
+ $t = $1;
+ $p = $2/100;
+ $h = $3;
+ }
+
+ 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= "ControlRoom";
+ my $value = sprintf("%2.1f° / %imbar",$t,$p);
+# my $value= sprintf("%.2fmT / %2.1f%%",sqrt($mx*$mx+$my*$my+$mz*$mz)/1000,$h);
+ my $longtext = sprintf("Mag: %.2fmT<br>Temp: %2.1f°C<br>Pres: %imbar<br>Hum: %2.1f%%<br>dew point: %2.1f°C",sqrt($mx*$mx+$my*$my+$mz*$mz)/1000,$t,$p,$h,$tp);
+
+ my $state = QA::OK;
+ $state = QA::WARN if $t > 30;
+ $state = QA::ERROR if $t > 35;
+
+ QA::WriteQALog($fqa,"misc2","envCH",30,$state,$value0,$value,$longtext);
+
+ HPlot::PlotAdd("Envtemp",$t,0);
+ HPlot::PlotAdd("Envhum",$h,0);
+ HPlot::PlotAdd("Envpres",$p,0);
+ HPlot::PlotDraw("Envtemp");
+ HPlot::PlotDraw("Envhum");
+ HPlot::PlotDraw("Envpres");
+# print "closing\n";
+ $port->close();
+
+ Perl2Epics::Put("CH_T",$t);
+ Perl2Epics::Update(0.2);
+
+ sleep 20;
+ }}
+
my $hour = strftime ("%H", localtime(time+$offset*86400+150));
$hour =~ s/\s//;
- my $plan = get("https://hessenbox-a10.rz.uni-frankfurt.de/dl/fiUP5enanrB2pwwuBDJxGj/ExpertsPlan.csv");
- if (!$plan) {
+my $plan;
+# $plan = get("https://hessenbox-a10.rz.uni-frankfurt.de/dl/fiUP5enanrB2pwwuBDJxGj/ExpertsPlan.csv");
+# if (!$plan) {
my $fileplan;
open($fileplan, "<", '/home/hadaq/trbsoft/daq/hmon/permanent/ExpertsPlan.csv') or die "can't open file";
local $/;
$plan = <$fileplan>;
close $fileplan;
- }
- else {
- my $fileplan;
- open($fileplan, ">", '/home/hadaq/trbsoft/daq/hmon/permanent/ExpertsPlan.csv') or die "can't open file";
- print $fileplan $plan;
- close $fileplan;
- }
+# }
+# else {
+# my $fileplan;
+# open($fileplan, ">", '/home/hadaq/trbsoft/daq/hmon/permanent/ExpertsPlan.csv') or die "can't open file";
+# print $fileplan $plan;
+# close $fileplan;
+# }
my @plan = split("\n",$plan);
foreach my $line (@plan) {
#if($busyboard != 0) {
#
# }
- $busyboardslist .= sprintf("%04x (%04x-%i)",$busyboard,$hub_addr,($i-1));#
+ $busyboardslist .= sprintf("%04x (%s, %04x-%i)",$busyboard,Hmon::getsystem($busyboard),$hub_addr,($i-1));#
$busyboardscnt++;
}
$str .= "<font class='mg'>";
#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' 6, '4' 12,'6' 18,'8' 24,'A' 30, 'C' 36, 'E' 42);",
+ additional => "set ytics ('I0' 0,'I5' 5,'II0' 8,'II5' 13,'III0' 16,'III5' 21,'IV0' 24, 'IV5' 29);set xtics('0' 0,'2' 6, '4' 12,'6' 18,'8' 24,'A' 30, 'C' 36, 'E' 42);",
showvalues => 0, }
);
#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,1,2,3);",
+ additional => "set ytics ('I0' 0,'I5' 5,'II0' 8,'II5' 13,'III0' 16,'III5' 21,'IV0' 24, 'IV5' 29);set xtics(0,1,2,3);",
showvalues => 3, }
);
#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,1,2,3);",
+ additional => "set ytics ('I0' 0,'I5' 5,'II0' 8,'II5' 13,'III0' 16,'III5' 21,'IV0' 24, 'IV5' 29);set xtics(0,1,2,3);",
showvalues => 2, }
);
HPlot::PlotClear('MDCPowerBoardTemp');
my $data;
- for my $p (0..1) {
+ for my $p (0..3) {
for my $s (0..5) {
$data->{$p}{$s} = eval(`cd ~/trbsoft/hades_mdc_settings/scripts;./powerboard_status.pl -p $p -s $s -r`);
my $ypos = 8*$p+$s;
}
HPlot::PlotDraw('MDCVoltSet');
+ HPlot::PlotJsonDump('MDCVoltSet','files/MDCVoltSet.json');
HPlot::PlotDraw('MDCPowerBoardCurrents');
HPlot::PlotDraw('MDCPowerBoardVoltages');
HPlot::PlotDraw('MDCPowerBoardTemp');
my $timer = 0;
my $offset_o2 = 0;
my $str = "";
-my @emailAddrs = ("juergen.friese\@ph.tum.de", "foertsch\@uni-wuppertal.de", "pauly\@physik.uni-wuppertal.de");
-#my @emailAddrs = ()
+# my @emailAddrs = ("juergen.friese\@ph.tum.de", "foertsch\@uni-wuppertal.de", "pauly\@physik.uni-wuppertal.de");
+my @emailAddrs = ();
my $mailoutWarn = 0;
my $mailoutErr = 0;
my $mailoutDaily = 0;
$qastate = QA::OK if ($IsobPress <= 2.0 && $IsobPress >= 0.9);
$qastate = QA::WARN_2 if (($IsobPress < 0.9) || ($IsobO2 >3500.0) || ($IsobRefR < 50.0));
$qastate = QA::ERROR_2 if (($IsobPress > 2.0) || ($IsobPress < 0.7) || ($IsobO2 > 5000.0) || ($IsobRefR < 20.0));
- # $qastate = QA::WARN_2 if (($IsobPress < 0.9) || ($IsobO2 >300.0) || ($IsobRefR < 70.0) || ($IsobScale1 < 40) || ($IsobScale2 < 40));
- # $qastate = QA::ERROR_2 if (($IsobPress > 2.0) || ($IsobPress < 0.7) || ($IsobO2 > 800.0) || ($IsobRefR < 50.0) || ($IsobScale1 < 37) || ($IsobScale2 < 37));
+ $qastate = QA::WARN_2 if (($IsobPress < 0.9) || ($IsobO2 >3500.0) || ($IsobRefR < 50.0) || ($IsobScale1 < 40) || ($IsobScale2 < 40));
+ $qastate = QA::ERROR_2 if (($IsobPress > 2.0) || ($IsobPress < 0.7) || ($IsobO2 > 5000.0) || ($IsobRefR < 20.0) || ($IsobScale1 < 37) || ($IsobScale2 < 37));
$qastate = min(QA::WARN_2,$qastate) if $QA::RichHvOff;
$qastate = QA::NOTE if $QA::RichGasOff;
$body .= sprintf("Isobutan pressure : %.2f bar Warn(<0.9)\n",$IsobPress);
$body .= sprintf("O2 concentration : %.1f ppm Warn(>2000.0)\n",$IsobO2);
$body .= sprintf("Isobutanoutput ratio : %.2f Warn(<70.0)\n", $IsobRefR);
- $body .= sprintf("Scales: %.1fkg / %.1fkg\n",,$IsobScale1,$IsobScale2);
+ $body .= sprintf("Scales: %.1fkg / %.1fkg Warn(< 40 kg)\n",,$IsobScale1,$IsobScale2);
Hmon::SendEmail($currEmailAddr,"GAS WARNING IN RICH",$body);
}
$mailoutWarn = time();
$body .= sprintf("Isobutan pressure : %.2f bar Error(<0.7, >2.0)\n",$IsobPress);
$body .= sprintf("O2 concentration : %.1f ppm Error(>5000.0)\n",$IsobO2);
$body .= sprintf("Isobutanoutput ratio : %.2f Error(<50.0)\n", $IsobRefR);
- $body .= sprintf("Scales: %.1fkg / %.1fkg\n",,$IsobScale1,$IsobScale2);
+ $body .= sprintf("Scales: %.1fkg / %.1fkg Warn(< 37 kg)\n",,$IsobScale1,$IsobScale2);
Hmon::SendEmail($currEmailAddr,"GAS ERROR IN RICH",$body);
}
$mailoutErr = time();
}
HPlot::PlotDraw('MicroRate');
HPlot::PlotDraw('MicroRate10ms');
+ HPlot::PlotJsonDump('MicroRate','files/microrate.json');
}
$o = trb_register_read_mem(0xffff,0xba00,0,272) or print trb_strerror() or sleep 5 and next;
for(my $e = 0; $e < $NUMPLOTS; $e++) {
HPlot::PlotDraw("TdcCalMon$e");
+ HPlot::PlotJsonDump("TdcCalMon$e","files/TdcCalMon$e.json");
}
$str = Hmon::MakeTitle(200, 110, "TDC Cal Mon",1);
fusermount -u vertex
timeout 2 bash -c "sshfs -o allow_other hadaq@hadesp66:/home/hades-qa/online/5.34.38/apr25/vertex/pics `pwd`/vertex"
+fusermount -u /tmp/qaexport
+timeout 2 bash -c "sshfs -o allow_other hadaq@hadesp66:/tmp/qaexport /tmp/qaexport"
+fusermount -u /srv/www/htdocs/qaweb/htdocs/qaexport
+timeout 2 bash -c "sshfs -o allow_other hadaq@hadesp66:/tmp/qaexport /srv/www/htdocs/qaweb/htdocs/qaexport"
+
#pkill -f "sshfs -o allow_other hadaq@hadesp63:/home/hadaq/local/tdcmon/dabc/cal"
fusermount -u calibration
timeout 2 bash -c "sshfs -o allow_other hadaq@hadesp63:/home/hadaq/local/tdcmon/dabc/cal `pwd`/calibration"
ln -fs `pwd`/getqa.cgi /srv/www/htdocs/mon/
ln -fs `pwd`/getjson.cgi /srv/www/htdocs/mon/
ln -fs `pwd`/getrootjson.cgi /srv/www/htdocs/mon/
+ln -fs `pwd`/gethmonroot.cgi /srv/www/htdocs/mon/
ln -fs `pwd`/trbcmd.cgi /srv/www/htdocs/mon/
ln -fs `pwd`/index.cgi /srv/www/htdocs/mon/
ln -fs `pwd`/getpic.cgi /srv/www/htdocs/mon/