From e4d6968189954f540eca04a4d63a680790687d0b Mon Sep 17 00:00:00 2001 From: maps Date: Fri, 31 Oct 2014 18:47:16 +0100 Subject: [PATCH] pack and unpack to save the signedness --- user_interface/plot.png | Bin 0 -> 4400 bytes user_interface/plotalldat.sh | 21 +++++++++++-- user_interface/pmt_ro.pl | 56 +++++++++++++++++++++++++++++++++-- user_interface/regio.pm | 11 +++---- 4 files changed, 77 insertions(+), 11 deletions(-) diff --git a/user_interface/plot.png b/user_interface/plot.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8f57cbafbb591653ec4885d3642e9a4bf3525ddf 100644 GIT binary patch literal 4400 zcmeHL`BziN7k>c(HxBRSnC|@6>pK820096do^Pn@F)+99(Gi}3yZ3lQ5Txs&QmOie1ppw# z0w6#xXJLWIj{(oRAP^!$T@@QP=vcAhP92}Mwe^-QTm1a| zqN1Y6Wb&m;muhQkSuEDGXU~R)hIC6Pot@9h&sOygD}$9{2$Bo4p?Wr5E{FJlZZ+UX z-Iu&3Z;fN#z7KTXiWSFnssI2d=lK|*R}li9zksaHL*zgu2twY#446Dpl%X8XZ)u2a zJhfis@Ic$i{Vbu^JEEQVa+S&?&phBUb)9G9;mqMY4L?R}WSzca_!C(*w z1P+ILo49Q~0GQw0>E*fS_+^=J0b%s9<-EX@j1>dnfHkOf630?I#DkPaiy@AlHV9D8|#stH?$eNWkO(%q4x9Pa? z?S$#MXNOy*rG1G6uBv4_yQCnwOR}^K$BTQLey@de?nQ2>fu6^8R9&*pVZZfZej#PX zb8_;u8)^UOoGg3hW*+Ka>G#7SID$7&74673I`ut%v@}}rjU#?1&VA_0k71EEet!7T zB8_woB`QB3AWZE&(ByLNQNU#97#z`_Xfkd*Z?WV~O=&?+y33G9Fj-E}MiY-)KlJDs znvivt?z^OlY8z>qah*Z?^Is<|9&plL8ia-H>q_+J-47wpL<5evrd6AmrmW%N+^F!_ z0R`ulxyU$T;_aQv7O01`oS~G06G6=A%4?DQSrj6Id#|9UvH7}vhJXjrjCp_n&tF?L65q7CQI>wC+PGnda+C(nUqs+OST`?t*e@6!^VYLO# zXEQ6PXf?r4ZI@2_y)smXWgmj-GuyvslCWdK=$WJb2Ts^qJ*F9TUF&f-mH03W6I=&ZckCjoa>m?{!3)H4ipV0>sop)a~#D)I1#eq34?&H9`4H&OS{* zoA#R-Imf`J?2P|D{l^MzL+ ze)Ox5`{C|JL}m9TjoMv2H}?ej%0FxR_Z)Nf4qps9)pnvX|iW&?SJCt9yo+Le>d0;cI&gsu67E|;etk3dyVdC4$JyE0U8)$3bZ{f>^w z83*{~zWLaHJdj565HnhwLOuxL6VwFjArutG$RNGvRt+IoVeKKQDdQP+= z4P|eR0+87{O6D@Gl5tMb1FJ9UZfVr|wh8k{CVSpSPsn-@!x#%%@-+4(;u8 z9n?AlN3I-UlZ~fn6Y}S<<&8LlJat)O4D;26t=w$QnEmmxlPPUl%Z~v6_Kyz$|071D zdtmH>clZz-ipDyBP|bCsQ|1a;Lw%SGG=AvDwmdeoNILh=)f5W=*eSwsW z`nI{u22oiJ&eLPmNJ%cYyC|b&T-#f07s3lF$Y}QZkb)>)u(-Ahdr}Io!JS~W`I`XF z!3DZ(<*<{0TcS${|1J&%4t8DaSkx}tZ#5D(dQ^ni<+aLOf;`?kYdW0f_4*=4Iz*ER z=2Rr>ih6Af@4u^%iid^j;z-f5Gb`P#Ms6$UE%B6?_Y6x>M3#?Nff|3Xps!VyD7qdL zBcK;Gj1#`!mD@Pynn;la?U-3Q0Kc$gtIySNI9gG3W<$LUaXX*vSo`u`+j@re;Z45cAAyE@ql`Y7s+wP;$ z_Gjicj%{3~v0Rrh>9)Fy3-gWB*xnS^=%gh5q9wK;VQwBe>ljv)TZ(+3qLDIfD6B`8LFtxv-4^nDsyFYS zD59+qz~84W(tf#bn7bP~91EPNE*yahdA zx{eUL_hi(J)P9EN3}}+1NYPiw$f={lYvXI5N)npxhZ`e6nQh6KObGOoE|biTI&Icv zUz5c!S9G`jQ5xZ9(o9?lqQAITeAHiJfBf] + +count on a specific channel for a specific time (default 1 sec) +./pmt_ro.pl action=count channel=signal [delay=2.5] + +read from a register, either by name or by address +./pmt_ro.pl action=read_register regName=signal_thresh + +./pmt_ro.pl action=read_register addr=21 + + + =head1 DESCRIPTION @@ -105,7 +118,8 @@ sub main { read_register => 1, write_register => 1, find_baseline => 1, - signal_range => 1 + signal_range => 1, + count => 1 }; # if method exists, execute it, if not complain and show help message @@ -116,7 +130,7 @@ sub main { my $return = $self->$action(%$args); # does it return anything? if(defined($return)){ # we get a return value - if(ref($return) eq "SCALAR"){ # just print it if it is a scalar + if(ref(\$return) eq "SCALAR"){ # just print it if it is a scalar print "$return\n"; } else { # use Data::Dumper to display a hash print "method returns a hash:\n"; @@ -129,6 +143,42 @@ sub main { } } +sub count { # count for a given time on a given channel + # return number of counts + my $self = shift; + my %options = @_; + + my $channel = $options{channel}; # can be "signal" or "veto" or "net" + my $delay = $options{delay} || 1; + + my $counter_addr; + my $threshold_addr; + + if( $channel eq "signal" ){ + $counter_addr = $self->{regaddr_lookup}->{signal_counter}; + $threshold_addr = $self->{regaddr_lookup}->{signal_thresh}; + } elsif ( $channel eq "veto" ){ + $counter_addr = $self->{regaddr_lookup}->{veto_counter}; + $threshold_addr = $self->{regaddr_lookup}->{veto_thresh}; + } elsif ( $channel eq "net" ){ + $counter_addr = $self->{regaddr_lookup}->{net_counter}; + $threshold_addr = $self->{regaddr_lookup}->{net_thresh}; + } else { + die "$channel is not a valid channel!\n possible channels are \"signal\",\"veto\" and \"net\"\n!"; + } + + $self->{regio}->write($self->{regaddr_lookup}->{acquisition},0); # stop acquisition + $self->{regio}->read($self->{regaddr_lookup}->{reset_counter}); # reset counter + $self->{regio}->write($self->{regaddr_lookup}->{acquisition},1); # start acquisition + Time::HiRes::sleep($delay); # let the counter count + $self->{regio}->write($self->{regaddr_lookup}->{acquisition},0); # stop acquisition + my $counts = $self->{regio}->read($counter_addr); # read counter value + $self->{regio}->write($self->{regaddr_lookup}->{acquisition},1); # start acquisition + + die "Padiwa does not answer!\n" unless defined($counts); + return $counts; +} + sub signal_range { # determine the range and the position the signal/noise in terms of # DAC setting my $self = shift; diff --git a/user_interface/regio.pm b/user_interface/regio.pm index bebf65e..abb23f5 100644 --- a/user_interface/regio.pm +++ b/user_interface/regio.pm @@ -128,11 +128,12 @@ sub communicate { } if($ack){ - my $byte3 = ord(substr($rstring,0,1)); - my $byte2 = ord(substr($rstring,1,1)); - my $byte1 = ord(substr($rstring,2,1)); - my $byte0 = ord(substr($rstring,3,1)); - my $val = (($byte3<<24)|($byte2<<16)|($byte1<<8)|$byte0); +# my $byte3 = ord(substr($rstring,0,1)); +# my $byte2 = ord(substr($rstring,1,1)); +# my $byte1 = ord(substr($rstring,2,1)); +# my $byte0 = ord(substr($rstring,3,1)); +# my $val = (($byte3<<24)|($byte2<<16)|($byte1<<8)|$byte0); + my $val = unpack('l',reverse pack('a4',substr($rstring,0,4))); return $val; } else { print "no answer\n" if $self->{verbose}; -- 2.43.0