]> jspc29.x-matter.uni-frankfurt.de Git - hades_mdc_settings.git/commitdiff
Start library with important conversion / lookup functions
authorJan Michel <michel@physik.uni-frankfurt.de>
Wed, 12 Oct 2022 10:28:45 +0000 (12:28 +0200)
committerJan Michel <michel@physik.uni-frankfurt.de>
Wed, 12 Oct 2022 10:28:45 +0000 (12:28 +0200)
installation/powerdistributor_positions.db
scripts/MDC.pm [new file with mode: 0644]
scripts/generate_address_list.pl

index 3c9dcadf4c612d6876460541a2b9abc5ba55f4d2..73bf0f6ef836b34699ddec0320c1e38f25acac83 100644 (file)
@@ -1,4 +1,5 @@
 #List of Positions of Power Distributor boards
+#hostnames are mdcpd000
 
 #  Plane   #  Sector  #  Serial
 ###################################
diff --git a/scripts/MDC.pm b/scripts/MDC.pm
new file mode 100644 (file)
index 0000000..40d401e
--- /dev/null
@@ -0,0 +1,105 @@
+package MDC;
+
+use warnings;
+no warnings "portable";
+use FileHandle;
+use Getopt::Long;
+use Data::Dumper;
+
+
+###############################################################################
+#returns address of chip at (plane,sector,board,fpga)
+#fpga = 5 for OEP, 0..2 for TDC
+#all counting from 0
+###############################################################################
+sub get_address {
+  my ($p,$s,$b,$e) = @_;
+
+  if($e == 5) {
+    return 0x8000 + ($p<2?0x0e00:0x0f00) + ($p%2 ? $s*16+96 : $s*16) + $b;
+    }
+  else {
+    return ($p<2?0x1000:0x2000) + ($p%2 ? $s*256+6*256 : $s*256) + $b*16 + $e;
+    }
+  }
+  
+###############################################################################
+#returns the position of chip with (address) as (plane,sector,board,fpga)
+#all counting from 0
+###############################################################################
+sub get_position {
+  my $addr = shift @_;
+  my ($p,$s,$b,$e);
+  
+  if($addr > 0x8000) {
+    $e = 5;
+    $b = $addr & 0xf;
+    $s = (($addr>>4)&0xf)%6;
+    $p = (($addr>>8)==0x8e)?0:2;
+    $p += 1 if (($addr>>4)&0xf)>=6;
+    }
+  else {
+    $e = $addr & 0x3;
+    $b = ($addr>>4) & 0xf;
+    $s = (($addr>>8)&0xf)%6;
+    $p = (($addr>>12)==0x01)?0:2;
+    $p += 1 if (($addr>>8)&0xf)>=6;
+    }
+  return ($p,$s,$b,$e);
+  }
+
+###############################################################################  
+#get the correct power channel for board with (address).
+#returns (hostname,board,output)
+###############################################################################
+sub get_power_channel {
+  my $addr = shift @_;
+  my ($p,$s,$b,$e) = get_position($addr);
+  my $id=-1;
+  
+  open FILE, "../installation/powerdistributor_positions.db" or die $!."\npowerdistributor_positions.db not found.";
+  while (my $a = <FILE>) {
+    if(my @values = $a =~ /^\s*(\d)\s+(\d)\s+(\d+)/) {
+      my $pd_p  = shift @values;
+      my $pd_s  = shift @values;
+      $id       = int(shift @values);
+      last if $p == $pd_p && $s == $pd_s;
+      }
+    }
+  close FILE;  
+  
+  my $hostname = sprintf("mdcpd%03x",$id);
+     $hostname = -1 if $id==-1;
+  return($hostname,int($b/4),$b%4);
+  }
+  
+1;
+
+
+__END__
+
+
+###############################################################################
+#Addressing scheme
+###############################################################################
+
+ OEP FPGA:
+
+    1 digit: 8 (as for all hubs)
+    2 digit: e/f (inner/outer MDC)
+    3 digit: 0..b (chamber number, 0..5 for MDC1/3 6..B for MDC2/4)
+    4 digit: 0..f (MBO number)
+
+TDC FPGA:
+
+    1 digit: 1/2 (inner/outer MDC)
+    2 digit: 0..b (chamber number, 0..5 for MDC1/3 6..B for MDC2/4)
+    3 digit: 0..f (MBO number)
+    4 digit: 0..2 (FPGA number)
+
+Hub FPGA:
+
+    1 digit: 8 (as for all hubs)
+    2 digit: 5
+    3 digit: 0..b (crate number, 0..5 inner MDC, 6..b outer MDC sectors)
+    4 digit FPGA number in crate (0:master & Subevent ID)
index 431c67581295bf6d9d78d3db4cc53f12ec9f3926..447fcb066f0c0b5937270bb386ef915577de3487 100755 (executable)
@@ -4,6 +4,8 @@ no warnings "portable";
 use FileHandle;
 use Getopt::Long;
 use Data::Dumper;
+use lib '.';
+use MDC;
 
 my $DEBUG = 0;       #print debug messages
 
@@ -44,17 +46,18 @@ foreach my $p (0..3) {
     
       my $str;
 
-      my $addr = 0x8000 + ($p<2?0x0e00:0x0f00) + ($p%2 ? $s*16+96 : $s*16) + $b;
+      my $addr;
+      $addr = MDC::get_address($p,$s,$b,5);
       $str .= sprintf("  0x%04x      %03i        %i\n",$addr,$boards->[$p][$s][$b],5);
       
-      $addr = ($p<2?0x1000:0x2000) + ($p%2 ? $s*256+6*256 : $s*256) + $b*16 + 0;
+      $addr = MDC::get_address($p,$s,$b,0);
       $str .= sprintf("  0x%04x      %03i        %i\n",$addr,$boards->[$p][$s][$b],0);
 
-      $addr = ($p<2?0x1000:0x2000) + ($p%2 ? $s*256+6*256 : $s*256) + $b*16 + 1;
+      $addr = MDC::get_address($p,$s,$b,1);
       $str .= sprintf("  0x%04x      %03i        %i\n",$addr,$boards->[$p][$s][$b],1);
 
       if($longs->[$p][$s][$b]) {
-        $addr = ($p<2?0x1000:0x2000) + ($p%2 ? $s*256+6*256 : $s*256) + $b*16 + 2;
+        $addr = MDC::get_address($p,$s,$b,2);
         $str .= sprintf("  0x%04x      %03i        %i\n",$addr,$boards->[$p][$s][$b],2);
         };
       
@@ -70,29 +73,3 @@ close FILE;
 
 
 __END__
-
-
-###############################################################################
-#Addressing scheme
-###############################################################################
-
- OEP FPGA:
-
-    1 digit: 8 (as for all hubs)
-    2 digit: e/f (inner/outer MDC)
-    3 digit: 0..b (chamber number, 0..5 for MDC1/3 6..B for MDC2/4)
-    4 digit: 0..f (MBO number)
-
-TDC FPGA:
-
-    1 digit: 1/2 (inner/outer MDC)
-    2 digit: 0..b (chamber number, 0..5 for MDC1/3 6..B for MDC2/4)
-    3 digit: 0..f (MBO number)
-    4 digit: 0..2 (FPGA number)
-
-Hub FPGA:
-
-    1 digit: 8 (as for all hubs)
-    2 digit: 5
-    3 digit: 0..b (crate number, 0..5 inner MDC, 6..b outer MDC sectors)
-    4 digit FPGA number in crate (0:master & Subevent ID)