]> jspc29.x-matter.uni-frankfurt.de Git - hadesdaq.git/commitdiff
update hmon files
authorhadaq <jan@lxhadeb07>
Mon, 29 Dec 2025 15:45:00 +0000 (16:45 +0100)
committerhadaq <jan@lxhadeb07>
Mon, 29 Dec 2025 15:45:00 +0000 (16:45 +0100)
30 files changed:
hmon/QA.pm
hmon/doc/misc2-boards.htt [new file with mode: 0644]
hmon/gethmonroot.cgi [new file with mode: 0755]
hmon/getqa.cgi
hmon/hmon_endpoints.pl
hmon/hmon_logerrors.pl
hmon/hmon_mdc_busy.pl [changed mode: 0755->0644]
hmon/hmon_mdc_linkerr.pl [changed mode: 0755->0644]
hmon/hmon_mdc_plotmissingboards.pl [changed mode: 0755->0644]
hmon/hmon_mdc_rate.pl [changed mode: 0755->0644]
hmon/hmon_mdc_ratecheck.pl [changed mode: 0755->0644]
hmon/hmon_mdc_retr.pl [changed mode: 0755->0644]
hmon/hmon_mdc_tokenmiss.pl [changed mode: 0755->0644]
hmon/hmon_mdc_voltage.pl [changed mode: 0755->0644]
hmon/hmon_mdcnew_endpoints.pl
hmon/hmon_mdcnew_missing.pl
hmon/hmon_mdcnew_rate.pl
hmon/hmon_mdcnew_temp.pl
hmon/hmon_mdcnew_voltage.pl
hmon/index.cgi
hmon/permanent/HV_FW_off.pl [new file with mode: 0644]
hmon/permanent/hmon_environment.pl
hmon/permanent/hmon_environment_countinghouse.pl [new file with mode: 0755]
hmon/permanent/hmon_expertsoncall.pl
hmon/permanent/hmon_hub.pl
hmon/permanent/hmon_mdcnew_powerstatus.pl
hmon/permanent/hmon_richIsobutan.pl
hmon/permanent/hmon_spillmon.pl
hmon/permanent/hmon_tdcchanerrors_testmonitor.pl
hmon/start.sh

index ff9d8b3e1d44bc577161166832088743ebef37f9..d23c8521bd4ce4a8d3d441eae48f8b01f498bcc5 100644 (file)
@@ -60,7 +60,7 @@ $entries->{'hv'}      = ['richhv','ecalhv','rpchv','fwhv','tofhv'];
 #$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'];
@@ -148,20 +148,20 @@ use constant {CTSAddress => 0x0003};
 #  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;
 
@@ -170,9 +170,9 @@ 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 =();
diff --git a/hmon/doc/misc2-boards.htt b/hmon/doc/misc2-boards.htt
new file mode 100644 (file)
index 0000000..478076f
--- /dev/null
@@ -0,0 +1,6 @@
+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".
diff --git a/hmon/gethmonroot.cgi b/hmon/gethmonroot.cgi
new file mode 100755 (executable)
index 0000000..aa830af
--- /dev/null
@@ -0,0 +1,186 @@
+#!/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);
+
index 36b8002973b9ac6e0d793b07efb8ce4eaefbf74d..6d345ec3726a9b7d7d154f0fe8a64b4e002969d5 100755 (executable)
@@ -30,7 +30,7 @@ my $out = "";
 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+)/;
index b0f1d1a8d51c7475842c13b7a74bf8e7d25f38cc..7b5d0dacfeee5a8884eb338fe905b005279ac0ef 100755 (executable)
@@ -27,7 +27,7 @@ my $waittime = 15;
 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");
@@ -53,7 +53,7 @@ while(1) {
 
     ####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,
@@ -61,12 +61,12 @@ while(1) {
 #      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,
        ###
        );
 
@@ -77,15 +77,15 @@ while(1) {
 # 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);
+         }
+       }
+     }
 
     
     
@@ -257,76 +257,76 @@ while(1) {
       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
 ########################
index f60c0771f43f430de7e8f44cd056ac5733b3253d..436b3420b88fcb6e375f86bc4667df831985d357 100755 (executable)
@@ -139,7 +139,7 @@ while (1) {
   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);
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 773cd7b0d555a8a709ced749abb6aae886e13812..49182a3afc6b98259be85450a53ca9f91fd3047c 100755 (executable)
@@ -28,13 +28,38 @@ while(1) {
     ####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;
@@ -133,7 +158,7 @@ my $longtext = "";
 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);
 }
index 2d2f4ad71abbf8bc32e127ed9d67604ec5aac82d..b07fcd98edbc09c7ae17985ba515aa0f65777c6c 100755 (executable)
@@ -20,9 +20,9 @@ trb_init_ports() or die trb_strerror();
 
 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)};
@@ -41,9 +41,9 @@ while (1) {
 
 
   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++) {    
index 09f5cfadab39398dfccbfc924b2c1a8d3e27b7d2..7fd6d4c06be0c9753bb4cdcc2403487669faad68 100755 (executable)
@@ -25,22 +25,22 @@ HPlot::PlotInit({
   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,  
   });
 
@@ -50,22 +50,22 @@ HPlot::PlotInit({
   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,  
   });  
 
@@ -99,7 +99,7 @@ HPlot::PlotInit({
   });    
   
   
-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();
@@ -136,13 +136,13 @@ while(1) {
 
   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]}) {
index 715b8386edda84906b795b18f76834b9858a218c..59ffd667e74b73eaede272e1022ca3f8b407b6b9 100755 (executable)
@@ -52,8 +52,8 @@ while (1) {
   }
 
   ($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++) {
@@ -67,7 +67,7 @@ while (1) {
   }
   $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 = {};
 
index 35dcb97b78085cc2f0531d1d74de53f7eb151fa0..a1e5c8595c613f46b92fc334ab023876390c2e9f 100755 (executable)
@@ -83,7 +83,36 @@ while (1) {
     }
 
   $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;
index c33e415cf6d68509a7c4d3c19702eff7d924a22e..e89096a5e56316131156baf8677825fc6ec8d29a 100755 (executable)
@@ -39,10 +39,9 @@ function openwin(url) {
 </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>
@@ -62,8 +61,8 @@ function openwin(url) {
 </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>-->
diff --git a/hmon/permanent/HV_FW_off.pl b/hmon/permanent/HV_FW_off.pl
new file mode 100644 (file)
index 0000000..5d8da81
--- /dev/null
@@ -0,0 +1,38 @@
+#!/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");
+  }
+  
+  
index 994905b257f67a00b3f3baedd7ffe75ae98d2040..cb7f232d5e24fd9716eaca7f6f4ba6a3a73295a1 100755 (executable)
@@ -31,7 +31,7 @@ $plot->{ylabel}  = "°C";
 $plot->{sizex}   = 630;
 $plot->{sizey}   = 220;
 $plot->{ymin} = 12;
-$plot->{ymax} = 26;
+$plot->{ymax} = "30<*";
 $plot->{xscale} = 10;
 $plot->{nokey} = 1;
 $plot->{buffer} = 1;
diff --git a/hmon/permanent/hmon_environment_countinghouse.pl b/hmon/permanent/hmon_environment_countinghouse.pl
new file mode 100755 (executable)
index 0000000..093ad32
--- /dev/null
@@ -0,0 +1,146 @@
+#!/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;
+  }}
+  
index 7dd0223ee85a5f59fc37a190017c4466f6513297..2d9cf70ae9a2742698e65aae79882fb91a6a3bce 100755 (executable)
@@ -47,20 +47,21 @@ while(1) {
   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) {
index abe0138f0d66dad72eb92239f0ccc8e4d9c97be2..b2894e6115fb4adbb1753475e51b6cd1683c9b58 100755 (executable)
@@ -322,7 +322,7 @@ sub display()
             #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'>";
index bfb7d948ef2e60c8ed052249c90cc735903f6f33..978c0327a493791d9a0f6cce4420b6c5b95c0bfe 100755 (executable)
@@ -41,7 +41,7 @@ HPlot::PlotInit({
   #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,  }
   );
 
@@ -65,7 +65,7 @@ HPlot::PlotInit({
   #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,  }
   );  
   
@@ -89,7 +89,7 @@ HPlot::PlotInit({
   #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,  }
   );  
   
@@ -136,7 +136,7 @@ while (1) {
   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;
@@ -168,6 +168,7 @@ while (1) {
     }
 
   HPlot::PlotDraw('MDCVoltSet');
+  HPlot::PlotJsonDump('MDCVoltSet','files/MDCVoltSet.json');
   HPlot::PlotDraw('MDCPowerBoardCurrents');
   HPlot::PlotDraw('MDCPowerBoardVoltages');
   HPlot::PlotDraw('MDCPowerBoardTemp');
index b09d9b9b0096610f6e4378a7ceaf1ad9b08a8db1..976877062eacf97efd6b2bfe30a41a3dad13ac24 100755 (executable)
@@ -101,8 +101,8 @@ HPlot::PlotInit($plotScale);
 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;
@@ -175,8 +175,8 @@ while(1) {
   $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;
 
@@ -187,7 +187,7 @@ while(1) {
       $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();
@@ -200,7 +200,7 @@ while(1) {
       $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();
index 1205c5db46b8158c30778c411d95fc2cfba1acec..f9370ad079887ac93c1c336f8e3e98b679e04d3d 100755 (executable)
@@ -290,6 +290,7 @@ while(1) {
       }
     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;
index 8cb093d3a89c19918272361cab8d099f5ed4f338..791f24ccf72742db64a861a45a3bc227e1bd156c 100644 (file)
@@ -382,6 +382,7 @@ HPlot::PlotInit({
   
   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);
index 516aa2195e2f41e06a499fa6e18172d7ffb123ca..d5a6450914c417d8b73300ff79cf80a8f012eeb9 100755 (executable)
@@ -51,6 +51,11 @@ timeout 2 bash -c "sshfs -o allow_other hadaq@hadesp66:/home/hades-qa/online/5.3
 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"
@@ -70,6 +75,7 @@ ln -fs `pwd`/get.cgi /srv/www/htdocs/mon/
 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/