From: Jan Michel Date: Mon, 16 Dec 2013 15:01:33 +0000 (+0100) Subject: added rate function to xml-db X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=3ee9f2ef63f3a55bcc5a1c14aa74d595ea065fdc;p=daqtools.git added rate function to xml-db --- diff --git a/web/htdocs/layout/blue.css b/web/htdocs/layout/blue.css index 14acdfa..622dc04 100644 --- a/web/htdocs/layout/blue.css +++ b/web/htdocs/layout/blue.css @@ -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 index 0000000..1f44a19 Binary files /dev/null and b/web/htdocs/layout/rate.png differ diff --git a/xml-db/database/TDC.xml b/xml-db/database/TDC.xml index f38440f..a1839c8 100644 --- a/xml-db/database/TDC.xml +++ b/xml-db/database/TDC.xml @@ -11,7 +11,7 @@ Channel-specific information - + Number of detected hits in channel @@ -84,61 +84,61 @@ Number of valid triggers received - + Number of valid timing triggers received - + Number of valid triggers received which are not timing triggers - + Number of invalid triggers received - + Number of multi timing triggers received (triggers received before trigger is released) - + Number of spurious triggers received (in case of timing trigger is validated although it was a timing-trigger-less trigger) - + Number of wrong readouts due to spurious triggers - + Number of spikes (pulses narrower than 40 ns) detected at the timing trigger input - + Total time length, that the readout FSM waited in the idle state (with granularity of 10 ns) - + Total time length, that the readout FSM waited in the wait states (with granularity of 10 ns) - + @@ -149,24 +149,24 @@ Number of release signals sent - + Total time length of the readout process (with granularity of 10 ns) - + Number of timeouts detected (too long delay after the timing trigger) - + Number of sent finished signals - + diff --git a/xml-db/get.pl b/xml-db/get.pl index e66e57a..39862da 100755 --- a/xml-db/get.pl +++ b/xml-db/get.pl @@ -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)