]> jspc29.x-matter.uni-frankfurt.de Git - mvdsensorcontrol.git/commitdiff
added the preview scripts
authorMichael Wiebusch <stratomaster@gmx.net>
Tue, 30 Jul 2013 16:14:03 +0000 (18:14 +0200)
committerMichael Wiebusch <stratomaster@gmx.net>
Tue, 30 Jul 2013 16:14:03 +0000 (18:14 +0200)
tools/preview/exec_evtbuild_t.pl [new file with mode: 0755]
tools/preview/run.pl [new file with mode: 0755]
tools/preview/testgui.pl [new file with mode: 0755]
tools/testgui.js

diff --git a/tools/preview/exec_evtbuild_t.pl b/tools/preview/exec_evtbuild_t.pl
new file mode 100755 (executable)
index 0000000..c6a0fcc
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+#use Gtk2 -init; # please, who needs gtk for this?!?
+use Data::Dumper;
+use feature 'say';
+require POSIX;
+use Bit::Vector;
+use Getopt::Long;
+use threads;
+
+
+my $thr1;
+my $thr2;
+
+my $opt_help;
+my $opt_time;
+my $time;
+
+
+GetOptions ('h|help'      => \$opt_help,
+            't|time=f'    => \$opt_time
+            );
+           
+if($opt_help) {
+    &help();
+    exit(0);
+}
+
+
+sub help(){
+    print "Usage: exec_evtbuild_t.pl -t <float>
+   
+required:
+   [-t|--time  <seconds>]             : The runtime of the daq_netmem (effective runtime).
+   [-h|--help]                        : Show this help.
+
+"
+}
+
+
+if (defined($opt_time)){
+       $time = $opt_time;
+}
+else{
+       $time = 3;
+}
+
+
+
+$thr1 = threads->new(\&execute, "timeout ".($time+1.5)." daq_evtbuild -m 1 -q 32 -d file -x te -Se -S boris");
+sleep 1;
+$thr2 = threads->new(\&execute, "timeout ".$time." daq_netmem -m 1 -q 32 -i 50000 -S boris");
+
+$thr1->join();
+$thr2->join();
+
+       
+       
+       
+       
+sub execute {
+       my $s = shift;
+       system($s);
+}
diff --git a/tools/preview/run.pl b/tools/preview/run.pl
new file mode 100755 (executable)
index 0000000..e92443d
--- /dev/null
@@ -0,0 +1,514 @@
+#!/usr/bin/perl -w
+
+# TODO
+# this is veeeeryyyy ugly!!!
+
+
+use strict;
+use warnings;
+# use Gtk2 -init;
+use Data::Dumper;
+use Time::HiRes qw( gettimeofday usleep time );
+use FileHandle;
+use feature 'say';
+use Bit::Vector;
+use POSIX qw/floor ceil/;
+use Getopt::Long;
+use CGI ':standard';
+
+my $here = qx/pwd/;
+
+my $q = CGI->new;
+
+
+my $opt_help;
+my $opt_time;
+my $time;
+my $opt_id;
+
+GetOptions ('h|help'      => \$opt_help,
+            't|time=f'    => \$opt_time,
+            'id=s'        => \$opt_id
+            );
+           
+if( $q->param('id') ) {
+  $opt_id = $q->param('id');
+}
+
+if( $q->param('t') ) {
+  $opt_time = $q->param('t');
+}          
+
+if($opt_help) {
+    &help();
+    exit(0);
+}
+
+unless($opt_time && $opt_id){
+    &help();
+#     exit(0);
+    $opt_time = 0.2;
+    $opt_id = "ccc1ccc1";
+}
+
+
+sub help(){
+    print "Usage: run.pl -t <float>
+   
+required:
+   [-t|--time  <seconds>]             : The runtime of the daq_netmem (effective runtime).
+   [-id <id>]                         : The id of the sensor you want to test
+optional:
+   [-h|--help]                        : Show this help.
+
+"
+}
+
+my $file;
+my @lines;
+my $pos;
+my $str;
+my $s;
+my $i;
+my $j;
+my $k;
+my $n;
+my $runtime;
+my $id;
+my $command;
+my @skiprun;
+
+my @data;
+my $run;
+my $mode;
+my $avg;
+my $counts;
+my $good_status;
+my $bad_status;
+my $broken;
+my @tokens;
+my $line;
+my $word;
+my @status_array;
+my @debug1_array;
+my @debug2_array;
+my @timestamp1_array;
+my @timestamp2_array;
+my @dlen_array;
+my @dcounter_array;
+my @framenum_array;
+my $dcount;
+my @pixels;
+
+my $avgA = 0;
+my $avgB = 0;
+my $avgC = 0;
+my $avgD = 0;
+my $undef_data;
+my @a;
+my $size;
+my $p1;
+my $p2;
+my $row;
+my $overflow;
+my $hits;
+my $col;
+
+
+
+
+
+
+
+
+
+sub run(){
+
+#   execute("cd /daq/trb_maps_jtag3/ui/;./ui.pl;");
+#   execute("trbcmd w 0xf013 0xc001 0x00FFFFFF");
+#   execute("trbcmd w 0xf013 0xc006 0x00002eaa");
+#   execute("cd /daq/trb_maps_jtag3/ui/;./start.pl");
+#   sleep 1;
+#   execute("trbcmd w 0xf013 0xc001 0x00000000");
+#   execute("trbcmd w 0xf013 0xc002 0x00000010");
+#   execute("trbcmd w 0xf013 0xc007 0x00000200");
+
+  sleep 1;
+  
+  #execute("trbcmd w 0xf013 0xb120 0x0000000A");
+
+  
+  say "All tresholds set...";
+
+  system("./exec_evtbuild_t.pl -t ".$runtime); #14
+  system("mv te1* ./temp.hld");
+
+
+  open(PIPE,"daq_anal ./temp.hld |");
+
+
+
+  undef @data;
+  $run = -1;
+  $mode = 0;
+  $i = 0;
+  $avg = 0;
+  $counts = 0;
+  $good_status  = 0;
+  $bad_status   = 0;
+  $broken = 0;
+  foreach $line (<PIPE>){
+    @tokens = split(/ +/, $line);
+    chomp(@tokens);
+    
+    foreach $word (@tokens){
+
+      if ($word =~ "00000000:"){
+        $mode = 1;
+        $run++;
+  #       $done[$run] = 0;
+        $status_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $debug1_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $debug2_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $timestamp1_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $timestamp2_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $dcounter_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $framenum_array[$run] = Bit::Vector->new_Hex(32, substr("0x00000000",2,8));
+        $dcount = 0;
+      }
+
+      if ($mode == 1){
+        if ($word =~ "ffffffff"){
+  #         $done[$run] = 1;
+          $mode = 2;
+        }
+      }
+      elsif ($mode == 2){
+        if ($word =~ ":"){}
+        else{
+          #$id = "aaa".$opt_sensor."aaa".$opt_sensor;
+          #$id = "c".$opt_chain."s".$opt_sensor."c".$opt_chain."s".$opt_sensor;
+          if ($word =~ $id){
+  #           $done[$run] = 2;
+            $mode = 3;
+          }
+          else{
+            $mode = 1;
+          }
+        }
+      }
+      elsif ($mode == 3){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 3;
+  #           say $word;
+          $status_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+  #           say $run;
+  #           say $status_array[$i]->to_Hex();
+          $mode = 4;
+        }
+      }
+      elsif ($mode == 4){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 4;
+          $debug1_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 5;
+        }
+      }
+      elsif ($mode == 5){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 5;
+          $debug2_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 6;
+        }
+      }
+      elsif ($mode == 6){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 6;
+          $timestamp1_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 7;
+        }
+      }
+      elsif ($mode == 7){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 7;
+          $timestamp2_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 8;
+        }
+      }
+      elsif ($mode == 8){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 8;
+          if ($word =~ "55555555"){
+            #$dcount++;
+            $mode = 9;
+          }
+          else{
+            $mode = 0;
+          }
+        }
+      }
+      elsif ($mode == 9){
+        if ($word =~ ":"){}
+        else{
+  #         $done[$run] = 9;
+          #$dcount++;
+          $framenum_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 10;
+        }
+      }
+      elsif ($mode == 10){
+        if ($word =~ ":"){}
+        else{
+          $dlen_array[$run] = Bit::Vector->new_Hex(32, substr($word,2,8));
+          $mode = 11;
+        }
+      }
+      elsif ($mode == 11){
+        if ($word =~ ":"){}
+        else{
+          if ($word =~ "80018001"){
+  #           $done[$run] = 11;
+            $mode = 0;
+          }
+          elsif ($word =~ "ffffffff"){
+  #             $dcounter_array[$run] = $dcount;
+              $mode = 0;
+              $broken++;
+          }
+          else{
+  #           $done[$run] = 10;
+            push(@{$data[$run]},$word);
+  #           $dcount++;
+          }
+        }
+      }
+    }
+  $i++;
+  }
+
+
+  close(PIPE);
+
+  say "Total frames: ".$run."   broken: ".$broken;
+
+  $i = 0;
+  $j = 0;
+  $k = 0;
+
+    
+  for ($i=0;$i<576;$i++){
+    for ($j=0;$j<1152;$j++){
+      $pixels[$i][$j]=0;
+    }
+  }
+    
+    
+    
+  $good_status  = 0;
+  $bad_status   = 0;
+  $avgA = 0;
+  $avgB = 0;
+  $avgC = 0;
+  $avgD = 0;
+  $counts = 0;
+  $undef_data = 0;
+  for ($i=0;$i<$run;$i++){
+    
+    if ($status_array[$i]->to_Hex() =~ /f000000f/i){
+      $good_status++;
+      $counts++;
+
+      if (defined($data[$i])){
+        @a = @{$data[$i]};
+        $size = 0;
+        foreach $word (@a){
+          #print "\n<<< ".$word;
+          #say $word;
+          $p1 = Bit::Vector->new_Hex(16, substr($word,2,4));
+          $p2 = Bit::Vector->new_Hex(16, substr($word,6,4));
+          if ($size == 0){
+            #print "\n   >>> size 0";
+            $size = int($p1->Chunk_Read(4,0));
+            $row  = int($p1->Chunk_Read(11,4));
+            $overflow = int($p1->Chunk_Read(1,15));
+            $hits = int($p2->Chunk_Read(2,0));
+            $col  = int($p2->Chunk_Read(11,2));
+            #print "\n   ".$p1->to_Bin();
+            #print "\n   size ".$size." row ".$row." ov ".$overflow;
+            #print "\n   ".$p2->to_Bin();
+            #print "\n   col ".$col." hits ".$hits;
+            #print DATA $row." ".$col."\n";
+            $pixels[$row][$col]++;
+            if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+            if ($hits > 0){
+              for ($k=0;$k<$hits;$k++){
+                $col++;
+                if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+                #print "\n   +col ".$col;
+                #print DATA $row." ".$col."\n";
+                $pixels[$row][$col]++;
+              }
+            }
+            $size--;
+          }
+          elsif ($size == 1){
+            #print "\n   >>> size 1";
+            #print "\n   ".$p1->to_Bin();
+            $hits = int($p1->Chunk_Read(2,0));
+            $col  = int($p1->Chunk_Read(11,2));
+            #print "\n   col ".$col." hits ".$hits;
+            #print DATA $row." ".$col."\n";
+            if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+            $pixels[$row][$col]++;
+            if ($hits > 0){
+              for ($k=0;$k<$hits;$k++){
+                $col++;
+                if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+                #print "\n   +col ".$col;
+                #print DATA $row." ".$col."\n";
+                $pixels[$row][$col]++;
+              }
+            }
+            $size = int($p2->Chunk_Read(4,0));
+            $row  = int($p2->Chunk_Read(11,4));
+            $overflow = int($p2->Chunk_Read(1,15));
+            #print "\n   ".$p2->to_Bin();
+            #print "\n   size ".$size." row ".$row." ov ".$overflow;
+          }
+          else{
+            #print "\n   >>> size ".$size;
+            $hits = int($p1->Chunk_Read(2,0));
+            $col  = int($p1->Chunk_Read(11,2));
+            if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+            #print "\n   ".$p1->to_Bin();
+            #print "\n   col ".$col." hits ".$hits;
+            #print DATA $row." ".$col."\n";
+            $pixels[$row][$col]++;
+            if ($hits > 0){
+              for ($k=0;$k<$hits;$k++){
+                $col++;
+                if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+                #print "\n   +col ".$col;
+                #print DATA $row." ".$col."\n";
+                $pixels[$row][$col]++;
+              }
+            }
+            $size--;
+            $hits = int($p2->Chunk_Read(2,0));
+            $col  = int($p2->Chunk_Read(11,2));
+            if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+            #print "\n   ".$p1->to_Bin();
+            #print "\n   col ".$col." hits ".$hits;
+            #print DATA $row." ".$col."\n";
+            $pixels[$row][$col]++;
+            if ($hits > 0){
+              for ($k=0;$k<$hits;$k++){
+                $col++;
+                if ($col < 288) {$avgA++;} elsif ($col < 576){$avgB++;} elsif ($col < 864){$avgC++;} elsif ($col < 1152){$avgD++;}
+                #print "\n   +col ".$col;
+                #print DATA $row." ".$col."\n";
+                $pixels[$row][$col]++;
+                #print "debug: ".$pixels[$row][$col]." ".$row." ".$col."\n";
+              }
+            }
+            $size--;
+          }
+        }
+      }
+      else{
+        $undef_data++;
+      }
+    } 
+    else{
+      $bad_status++;
+    }
+      
+  }
+  
+  say "good: ".$good_status."   bad: ".$bad_status;
+  say "Total hits: ".$avgA."  ".$avgB."  ".$avgC."  ".$avgD."\n";
+
+  if ($counts > 0){
+    $avgA = $avgA/$counts;
+    $avgB = $avgB/$counts;
+    $avgC = $avgC/$counts;
+    $avgD = $avgD/$counts;
+    
+    say "Normalized: ".$avgA."  ".$avgB."  ".$avgC."  ".$avgD."\n";
+    
+#     $avgal->set_text("ADC A - ".$avgA);
+#     $avgbl->set_text("ADC B - ".$avgB);
+#     $avgcl->set_text("ADC C - ".$avgC);
+#     $avgdl->set_text("ADC D - ".$avgD);
+  }
+  else{
+    say "Error: NO GOOD FRAMES!!!";
+#     $avgal->set_text("ADC A - n/a");
+#     $avgbl->set_text("ADC B - n/a");
+#     $avgcl->set_text("ADC C - n/a");
+#     $avgdl->set_text("ADC D - n/a");
+  }
+
+#   $stats->set_text("Statistics (total/broken/good/bad):   $run / $broken / $good_status / $bad_status");
+    
+  open(DATA,"> ./bitmap_1.pix") || die("Cannot create data file!");
+
+  for ($i=0;$i<576;$i++){
+    for ($j=0;$j<1152;$j++){
+      print DATA $pixels[$i][$j]." ";
+    }
+    print DATA "\n";
+  }
+  close(DATA);
+
+
+  $command = "
+  gnuplot -e \"
+  set terminal pngcairo;
+  set palette model RGB;
+  set xrange [0:1152];
+  set yrange [0:576];
+  set cbrange [0:20000];
+  set palette defined ( 0 'white', 1 'red', 5 'black', 10 'blue', 20000 'green');
+  set output './image_recalibrated_1.png';
+  plot './bitmap_1.pix' matrix with image;
+  exit;
+  \"
+  ";
+
+
+  system($command);
+  
+}
+
+
+sub execute {
+  my $s = shift;
+  system($s);
+}
+
+
+
+
+
+system("rm image_recalibrated_1.png");
+
+$runtime = $opt_time;
+$id =$opt_id;
+
+$ENV{'JTAGPATH'}="/local.1/jtag_mvd/soft/toolbox/jtag_atomic/";
+$ENV{'DAQOPSERVER'}="localhost:7";
+chdir("../");
+system("./startup.pl ../setup/testsetup.xml");
+chdir("preview");
+
+run();
+
+
+1;
diff --git a/tools/preview/testgui.pl b/tools/preview/testgui.pl
new file mode 100755 (executable)
index 0000000..0f54245
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/perl -w
+#print "Content-type: text/html\n\n";
+
+
+my $me = "testgui.pl";
+
+use strict;
+use warnings;
+use POSIX;
+use CGI ':standard';
+use Cwd;
+use CGI::Carp qw(fatalsToBrowser);
+use HTML::Entities;
+# require Common;
+# require xmlOperations;
+
+my $here = getcwd();
+
+my $q = CGI->new;
+
+print header;
+print start_html(
+-title=>'testgui',
+-style=>{'src'=>'../layout/styles.css'}
+);
+
+print h2("testgui");
+print "<p> still more to come </p>";
+
+print escapeHTML("hallo<<<>>>&&&!!"),br;
+print escapeHTML($here);
+$ENV{'PATH'}=$ENV{'PATH'}.":/home/hadaq/bin";
+print br,$ENV{'PATH'},br;
+print system("./run.pl -t 0.1 -id ccc1ccc1");
+
+1;
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd610dda18c8a2d1631019906c27c230f6716a28 100644 (file)
@@ -0,0 +1,27 @@
+function getdata(command,dId,async) {
+  var xmlhttp = null;
+  //var cb = null;
+  xmlhttp=new XMLHttpRequest();
+  //cb = callback;
+  var destId = dId;
+  
+  xmlhttp.onreadystatechange = function() {
+    if(xmlhttp.readyState == 4 && xmlhttp.status==200) {
+      //if(cb)
+  if(document.getElementById(destId).innerHTML){
+  document.getElementById(destId).innerHTML  = xmlhttp.responseText;  
+  }
+        //cb(xmlhttp.responseText);
+  //document.getElementById(destId).innerHTML  = xmlhttp.responseText;  
+      }
+    }
+
+  xmlhttp.open("GET",command,async);
+  xmlhttp.send(null);
+  }
+  
+  
+  
+  
+  
+  
\ No newline at end of file