]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
added CTS Hodo channels to scaler view
authorHadaq@styx <hadaq@styx>
Wed, 11 Dec 2013 23:00:31 +0000 (00:00 +0100)
committerHadaq@styx <hadaq@styx>
Thu, 12 Dec 2013 15:16:47 +0000 (16:16 +0100)
web/htdocs/tools/scaler.pl

index cf105472a420e34ba785b6ebb7980e9daa72b5d8..50b67277dedf226315815e989d963ec78f84c6a2 100755 (executable)
@@ -5,6 +5,10 @@ use CGI::Carp qw(fatalsToBrowser);
 use lib qw|../commands htdocs/commands|;
 use xmlpage;
 # use Data::TreeDumper;
+#use Data::Dumper;
+
+# my $logfh;
+# open ($logfh, ">>/tmp/debug_out.log");
 
 my $olddata, my $t, my $dataarr;
 
@@ -25,6 +29,10 @@ if($ENV{'QUERY_STRING'} =~ /get/) {
     $olddata = lock_retrieve("/tmp/scalers.$p[1].store");
     }
   my $data = trb_registertime_read_mem(0x3820,0xc001,0,64) or die trb_strerror();
+  my $data2 = trb_registertime_read_mem(0x8000,0xa134,0,3) or die trb_strerror();
+  foreach my $k (keys %$data2) { $data->{$k} = $data2->{$k};}
+  
+#   print $logfh Dumper $data; print $logfh Dumper $data2;
   my $delay = ($data->{0x3820}->{time}->[0]||0) - ($olddata->{values}->{0x3820}->{time}->[0]||60000);
   $delay += 0x10000 if ($delay < 0);
   $delay *= 16.*125/100;
@@ -75,9 +83,56 @@ if($ENV{'QUERY_STRING'} =~ /get/) {
     print $t;
     print "</table></div>\n";
     }
+###
+# Scalers from CTS AddON
+  $delay = ($data->{0x8000}->{time}->[0]||0) - ($olddata->{values}->{0x8000}->{time}->[0]||60000);
+  $delay += 0x10000 if ($delay < 0);
+  $delay *= 16.;
+  $delay = 1E6 if $delay == 0;
+  for(my $i = 0; $i<3; $i++) {
+    $rate->[64+$i] = (($data->{0x8000}->{value}[$i]||0) & 0x00ffffff) - (($olddata->{values}->{0x8000}->{value}[$i]||($data->{0x3820}->{value}[$i]||0)) & 0x00ffffff);
+    $rate->[64+$i] += 0x01000000 if ($rate->[64+$i] < 0);
+    $rate->[64+$i] = $rate->[64+$i] / ($delay/1E6); 
+    }
+  my @dat = $data->{0x8000}->{value};
+  my $start = -9;
+  my $historyexists = exists($olddata->{rate});
+  if ($historyexists && scalar @{$olddata->{rate}} < 9) {
+    $start = -(scalar @{$olddata->{rate}});
+    }
 
-
-  printf("<hr classxtics=\"queryresult\"><p>Time between last two readings (mod 1.31s) %d ms",$delay/1000.);
+  my $avgsum = 0; $sum = 0;
+  for(my $j=0;$j<2;$j++) {
+    $sum += $rate->[64+$j*2];
+    $avgsum += $rate->[64+$j*2];
+    if($historyexists) {
+      foreach my $k ($start .. -1) {
+       $avgsum += $olddata->{rate}->[$k]->[64+$j*2]||0;
+       }
+      }
+    }
+  $avgsum /= 1-$start;
+  print "<div><hr class=\"queryresult\"><table class='queryresult scalers'>";
+  $t  = sprintf("<tr><td><b>CTS</b><th>Average<th>Current<th>Ratio");
+  $t .= sprintf("<td rowspan=\"6\"><img height=\"180\" width=\"700\" src=\"scaler.pl?plot%1d%d.%d\">",$j+5,$q,time()/5);
+  $t .= sprintf("<tr><td>Sum<td>%d<td>%d<td>",$avgsum,$sum);
+  for(my $j=0;$j<2;$j++) {
+    my $avgrate = $rate->[$j*2+64];
+    if($historyexists) {
+      foreach my $k ($start .. -1) {
+       $avgrate += $olddata->{rate}->[$k]->[$j*2+64]||0;
+       }
+      }
+    $avgrate /= 1-$start;
+    $t .= sprintf("<tr><td>Hodo %d<td>%d",$j+1, $avgrate);
+    $t .= sprintf("<td title=\"%d\">%d",$data->{0x8000}->{value}[$j*2],$rate->[$j*2+64]);
+    $t .= sprintf("<td>%.1f%%",$rate->[$j*2+64]/($sum||1E334)*100);
+    }
+  #$t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/&#8198;/g; 
+  print $t;
+  print "</table></div>\n";
+    
+  printf("<hr class=\"queryresult\"><p>Time between last two readings (mod 1.6s) %d ms",$delay/1000.);
   printf(".  %d entries",scalar @{$olddata->{rate}});
   if((scalar @{$olddata->{rate}}) >= 100) {
     shift(@{$olddata->{rate}});
@@ -110,10 +165,12 @@ elsif($ENV{'QUERY_STRING'} =~ /plot/) {
   $cmd .= "unset xtics;\n";
   $cmd .= "set ylabel offset 1,0 \\\"kHz\\\";\n";
   $cmd .= "set lmargin 8;set rmargin 0.1;set tmargin 0.7; set bmargin 0.7;\n";
-  $cmd .= "plot '-' with lines,'-' with lines,'-' with lines, '-' with lines\n";
-  for(my $j=0; $j<4; $j++) {
+  $cmd .= "plot '-' with lines,'-' with lines,'-' with lines, '-' with lines\n" if $num<5;
+  $cmd .= "plot '-' with lines,'-' with lines\n" if $num==5;
+  for(my $j=0; $j<($num==5?2:4); $j++) {
     foreach my $r (@{$data->{rate}}) {
-      $cmd .= ($r->[$p[1]*16+8+2*$j]/1000.)."\n";
+      $cmd .= ($r->[$num*16+8+2*$j]/1000.)."\n" if $num<5;
+      $cmd .= ($r->[64+2*$j]/1000.)."\n" if $num==5;
       }
     $cmd .= "\ne\n";
     }
@@ -137,12 +194,12 @@ else {
 
   my @setup;
   $setup[0]->{name}    = "Scalers";
-  $setup[0]->{cmd}     = "get.".$ts;
-  $setup[0]->{period}  = 1000;
+  $setup[0]->{cmd}     = "get".$ts;
+  $setup[0]->{period}  = 800;
   $setup[0]->{generic} = 0;
 
 
   xmlpage::initPage(\@setup,$page);
   }
 
-return 1;
\ No newline at end of file
+return 1;