]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
added rate function to xml-db
authorJan Michel <j.michel@gsi.de>
Mon, 16 Dec 2013 15:01:33 +0000 (16:01 +0100)
committerJan Michel <j.michel@gsi.de>
Mon, 16 Dec 2013 15:01:40 +0000 (16:01 +0100)
web/htdocs/layout/blue.css
web/htdocs/layout/rate.png [new file with mode: 0644]
xml-db/database/TDC.xml
xml-db/get.pl

index 14acdfad683eb6c6544084d0eea25f03b99d0218..622dc046a7942e487863aac33745379b0b888a6a 100644 (file)
@@ -309,6 +309,13 @@ hr.queryresult  {
   padding-left:16px;
 }
 
+.rate {
+  background-image:url("rate.png");
+  background-repeat:no-repeat;
+  background-position:fixed;
+  padding-left:16px;
+}
+
 table.queryresult td.slice, table.queryresult th.slice {
   text-align:center;
   background:#eee;
diff --git a/web/htdocs/layout/rate.png b/web/htdocs/layout/rate.png
new file mode 100644 (file)
index 0000000..1f44a19
Binary files /dev/null and b/web/htdocs/layout/rate.png differ
index f38440f901f47f387f640217443412dd51caf616..a1839c80d36cc8ab8c5c947035168280098edd38 100644 (file)
@@ -11,7 +11,7 @@
   <!--===========================================-->
   <register name="Channel" address="0000" mode="r" repeat="65">
     <description>Channel-specific information</description>
-    <field name="HitCounter" start="0" bits="24" format="unsigned" purpose="statistics">
+    <field name="HitCounter" start="0" bits="24" format="unsigned" purpose="statistics" rate="1">
       <description>Number of detected hits in channel</description>
     </field>
     <field name="InputState" start="31" bits="1" format="enum" purpose="status">
 
     <register name="TriggerCounter" address="0004">
       <description>Number of valid triggers received</description>
-      <field name="TriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="TriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="TimingTriggerCounter" address="0005">
       <description>Number of valid timing triggers
       received</description>
-      <field name="TimingTriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="TimingTriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="NoTimingTriggerCounter" address="0006">
       <description>Number of valid triggers received which are not
       timing triggers</description>
-      <field name="NoTimingTriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="NoTimingTriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="InvalidTriggerCounter" address="0007">
       <description>Number of invalid triggers received</description>
-      <field name="InvalidTriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="InvalidTriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="MultiTimingTriggerCounter" address="0008">
       <description>Number of multi timing triggers received (triggers
       received before trigger is released)</description>
-      <field name="MultiTimingTriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="MultiTimingTriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="SpuriousTriggerCounter" address="0009">
       <description>Number of spurious triggers received (in case of
       timing trigger is validated although it was a
       timing-trigger-less trigger)</description>
-      <field name="SpuriousTriggerCounter" start="0" bits="24" format="unsigned" />
+      <field name="SpuriousTriggerCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="WrongReadoutsCounter" address="000a">
       <description>Number of wrong readouts due to spurious
       triggers</description>
-      <field name="WrongReadoutsCounter" start="0" bits="24" format="unsigned" />
+      <field name="WrongReadoutsCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="SpikesCounter" address="000b">
       <description>Number of spikes (pulses narrower than 40 ns)
       detected at the timing trigger input</description>
-      <field name="SpikesCounter" start="0" bits="24" format="unsigned" />
+      <field name="SpikesCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="IdleTime" address="000c">
       <description>Total time length, that the readout FSM waited in
       the idle state (with granularity of 10 ns)</description>
-      <field name="IdleTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" />
+      <field name="IdleTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" rate="1" />
     </register>
 
     <register name="WaitTime" address="000d">
       <description>Total time length, that the readout FSM waited in
       the wait states (with granularity of 10 ns)</description>
-      <field name="WaitTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" />
+      <field name="WaitTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" rate="1" />
     </register>
 
     <register name="TotalEmptyChannelsCounter" address="000e">
 
     <register name="ReleaseCounter" address="000f">
       <description>Number of release signals sent</description>
-      <field name="ReleaseCounter" start="0" bits="24" format="unsigned" />
+      <field name="ReleaseCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="ReadoutTime" address="0010">
       <description>Total time length of the readout process (with
       granularity of 10 ns)</description>
-      <field name="ReadoutTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" />
+      <field name="ReadoutTime" start="0" bits="24" format="unsigned" unit="ns" scale="10" rate="1" />
     </register>
 
     <register name="TimeoutCounter" address="0011">
       <description>Number of timeouts detected (too long delay after
       the timing trigger)</description>
-      <field name="TimeoutCounter" start="0" bits="24" format="unsigned" />
+      <field name="TimeoutCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
     <register name="FinishedCounter" address="0012">
       <description>Number of sent finished signals</description>
-      <field name="FinishedCounter" start="0" bits="24" format="unsigned" />
+      <field name="FinishedCounter" start="0" bits="24" format="unsigned" rate="1" />
     </register>
 
   </group>
index e66e57ae6cee32ba0d5f3187f09e908c88837892..39862dafd1edcef821ff0f408422eda640ea7297 100755 (executable)
@@ -2,6 +2,7 @@
 use HADES::TrbNet;
 use Storable qw(lock_store lock_retrieve);
 use feature "switch";
+use Time::HiRes qw( time );
 use CGI::Carp qw(fatalsToBrowser);
 
 use if (!defined $ENV{'QUERY_STRING'}), warnings;
@@ -18,7 +19,7 @@ my $verbose = 0;
 my $isbrowser = 0;
 my $server = $ENV{'SERVER_SOFTWARE'} || "";
 my @request;
-my ($file,$entity,$netaddr,$name, $style, $storefile);
+my ($file,$entity,$netaddr,$name, $style, $storefile, $rates, $cache,$olddata);
 
 
 $ENV{'DAQOPSERVER'}="localhost:7" unless (defined $ENV{'DAQOPSERVER'});
@@ -80,8 +81,8 @@ foreach my $req (@request) {
   my $isColor  = $style =~ /color/i;  
   my $sortAddr = $style =~ /sortaddr/i;
      $verbose  = ($style =~ /verbose/i) ||$verbose;
-  my $rates    = $style =~ /rates/i;
-  my $cache    = $style =~ /cache/i;
+     $rates    = $style =~ /rate/i;
+     $cache    = $style =~ /cache/i;
     
      
 ###############################
@@ -105,7 +106,7 @@ foreach my $req (@request) {
   
   if($rates) {
     if(-e $storefile) {
-      my $olddata = lock_retrieve($storefile);
+      $olddata = lock_retrieve($storefile);
       }
     }
 
@@ -116,10 +117,12 @@ foreach my $req (@request) {
 ###############################
   $once = (defined $slice)?1:0;
   if ($isbrowser) {
+    $data->{time0}=time();
     requestdata($db->{$name},$name,$slice);
     generateoutput($db->{$name},$name,$slice,$once);
     if($rates) {
-      store_lock($data,$storefile);
+      $data->{time1}=time();
+      lock_store($data,$storefile);
       }
     }
   else {
@@ -131,13 +134,20 @@ foreach my $req (@request) {
 #### Formatting of values
 ###############################
 sub FormatPretty {
-  my ($value,$obj,$name,$cont,$class,$cstr) = @_;
+  my ($value,$obj,$name,$cont,$class,$cstr,$addr,$b) = @_;
+  $class = "" unless $class;
+
   $value  = $value >> ($obj->{start});
   $value &= ((1<<$obj->{bits})-1);
   my $rawvalue = $value;
+  
+  if ($rates && $obj->{rate}){
+    $value = makerate($obj,$value,$addr,$b);
+    $class.=" rate";
+    }
+  
   $value = $value * ($obj->{scale}||1) + ($obj->{scaleoffset}||0);
   
-  $class = "" unless $class;
   $cstr  = "" unless $cstr;
   my $ret, my $cl;
   if (defined $cont) {
@@ -321,7 +331,7 @@ sub generateoutput {
             $fullc .= ".$slice" if ($once != 1 && defined $obj->{repeat});
             my $cstr = sprintf("%s-0x%04x-%s", $entity,$b,$fullc );
             my $wr = 1 if $db->{$c}->{mode} =~ /w/;
-            $ttmp .= FormatPretty($data->{$addr}->{$b},$db->{$c},$c,"td",($wr?"editable":""),$cstr);
+            $ttmp .= FormatPretty($data->{$addr}->{$b},$db->{$c},$c,"td",($wr?"editable":""),$cstr,$addr,$b);
             }
           }
         elsif($obj->{type} eq "field" || $obj->{type} eq "registerfield") {
@@ -329,7 +339,7 @@ sub generateoutput {
           $fullc .= ".$slice" if ($once != 1 && defined $obj->{repeat});
           my $cstr = sprintf("%s-0x%04x-%s", $entity,$b,$fullc );
           my $wr = 1 if $obj->{mode} =~ /w/;
-          $ttmp .= FormatPretty($data->{$addr}->{$b},$obj,$fullc,"td",($wr?"editable":""),$cstr);
+          $ttmp .= FormatPretty($data->{$addr}->{$b},$obj,$fullc,"td",($wr?"editable":""),$cstr,$addr,$b);
           }
         $tarr{sprintf("%05i%04i",$b,$slice)}=$ttmp;
         }
@@ -341,7 +351,18 @@ sub generateoutput {
   print $t;
   }
 
-
+sub makerate {
+  my ($obj,$val,$addr,$b) = @_;
+  if(defined $olddata->{$addr}->{$b}) {
+    $val -= $olddata->{$addr}->{$b};
+    }
+  my $delay = $data->{time0} - $olddata->{time0};
+  while ($val < 0) {
+    $val += 1<<$obj->{bits}; 
+    }
+  $val /= $delay;
+  return $val;
+  }
   
 ###############################
 #### Analyze Object & print contents (the simple minded way)