| 1 | #!/usr/bin/perl -w
|
|---|
| 2 |
|
|---|
| 3 | use strict ;
|
|---|
| 4 |
|
|---|
| 5 | use File::Basename ;
|
|---|
| 6 |
|
|---|
| 7 | # variables
|
|---|
| 8 | my ($i,$j) ; # loop
|
|---|
| 9 | my $events ; # number of entries
|
|---|
| 10 |
|
|---|
| 11 | my @ret ; ; # variable handling (for i/o ntuple)
|
|---|
| 12 |
|
|---|
| 13 | my $mcount = 0;
|
|---|
| 14 | my $txtfile ;
|
|---|
| 15 | my $hbkfile ;
|
|---|
| 16 | my $file ;
|
|---|
| 17 |
|
|---|
| 18 | my @a ;
|
|---|
| 19 | my @surface = () ; # surface point XX (generated)
|
|---|
| 20 | my @vertex = (0,0,0) ; # vertex position P (generated)
|
|---|
| 21 | my @momentum = () ; # momentum p (generated)
|
|---|
| 22 | my @intersection = () ; # reconstructed intersection with solid
|
|---|
| 23 | my $delta = 0 ; # distance between surface point XX and intersection
|
|---|
| 24 | my @bestintersection = () ; # the best intersection (there are more than 1)
|
|---|
| 25 | my $bestdelta = 0 ;
|
|---|
| 26 | my $phi = 0 ; # two parameters describing the surface point
|
|---|
| 27 | my $u = 0;
|
|---|
| 28 |
|
|---|
| 29 | my $distance ; # distance between surface point and true vertex
|
|---|
| 30 | my $theta ; # angle between momentum p and surface normal at XX (true)
|
|---|
| 31 |
|
|---|
| 32 | # --------------------------------------------------------
|
|---|
| 33 |
|
|---|
| 34 |
|
|---|
| 35 | # now start a loop over different approximations ..
|
|---|
| 36 |
|
|---|
| 37 | my @filelist = glob "data/*.data" ;
|
|---|
| 38 |
|
|---|
| 39 | foreach $file ( @filelist ) {
|
|---|
| 40 |
|
|---|
| 41 | next unless ( -s $file ) ;
|
|---|
| 42 |
|
|---|
| 43 | $txtfile = "hbk/" . basename($file,".data") . ".txt" ;
|
|---|
| 44 | $hbkfile = "hbk/" . basename($file,".data") . ".hbk" ;
|
|---|
| 45 |
|
|---|
| 46 | if ( -e $hbkfile )
|
|---|
| 47 | {
|
|---|
| 48 | print "merge of $hbkfile already done...\n" ;
|
|---|
| 49 | next ;
|
|---|
| 50 | }
|
|---|
| 51 |
|
|---|
| 52 | print "merge $file to temporary $txtfile\n" ;
|
|---|
| 53 |
|
|---|
| 54 | open(TXT,">$txtfile") || die "cannot open file $txtfile:$!\n";
|
|---|
| 55 |
|
|---|
| 56 | open(FH,$file) || die "cannot open file $file:$!\n";
|
|---|
| 57 | $mcount = 0 ;
|
|---|
| 58 | while ( <FH> ) {
|
|---|
| 59 |
|
|---|
| 60 | next unless /^(Event|Surface|Vertex|Momentum|EndOfEvent|Intersection|Distance|Angle)/ ;
|
|---|
| 61 |
|
|---|
| 62 | s/[(),]/ /g ; # substitute brackets {} and ,
|
|---|
| 63 | @a = split ; # split the line
|
|---|
| 64 |
|
|---|
| 65 | if ( $a[0] eq "Event" ) {
|
|---|
| 66 |
|
|---|
| 67 | $mcount ++ ; # event counter
|
|---|
| 68 |
|
|---|
| 69 | $bestdelta = 1e99 ; # reset the data for every event
|
|---|
| 70 | @surface = ( 1e99,1e99,1e99) ;
|
|---|
| 71 | @vertex = (1e99,1e99,1e99) ;
|
|---|
| 72 | @momentum = (1e99,1e99,1e99) ;
|
|---|
| 73 | @intersection = (1e99,1e99,1e99) ;
|
|---|
| 74 | $distance = 1e99 ;
|
|---|
| 75 | $theta = 1e99 ;
|
|---|
| 76 |
|
|---|
| 77 | if ( $mcount % 10000 == 0 ) {
|
|---|
| 78 | print "event nr. $mcount\n" ;
|
|---|
| 79 | }
|
|---|
| 80 | }
|
|---|
| 81 | elsif ( $a[0] eq "Surface" ) {
|
|---|
| 82 | @surface = ( $a[1], $a[2], $a[3] ) ;
|
|---|
| 83 | }
|
|---|
| 84 | elsif ( $a[0] eq "Vertex" ) {
|
|---|
| 85 | @vertex = ( $a[1], $a[2], $a[3] ) ;
|
|---|
| 86 | $u = $a[4] ; $phi = $a[5] ;
|
|---|
| 87 | }
|
|---|
| 88 | elsif ( $a[0] eq "Momentum" ) {
|
|---|
| 89 | @momentum = ( $a[1], $a[2], $a[3] ) ;
|
|---|
| 90 | }
|
|---|
| 91 | elsif ( $a[0] eq "Distance" ) {
|
|---|
| 92 | $distance = $a[1] ;
|
|---|
| 93 | }
|
|---|
| 94 | elsif ( $a[0] eq "Angle" ) {
|
|---|
| 95 | $theta = $a[1] ;
|
|---|
| 96 | }
|
|---|
| 97 | elsif ( $a[0] eq "Intersection" ) {
|
|---|
| 98 | @intersection = ( $a[1], $a[2], $a[3] ) ;
|
|---|
| 99 | $delta = $a[4] ;
|
|---|
| 100 | if ( $delta < $bestdelta ) {
|
|---|
| 101 | $bestdelta = $delta ;
|
|---|
| 102 | @bestintersection = @intersection ;
|
|---|
| 103 | }
|
|---|
| 104 | }
|
|---|
| 105 | elsif ( $a[0] eq "EndOfEvent" ) {
|
|---|
| 106 | @ret = ( $phi, $u, @surface , @vertex,
|
|---|
| 107 | $distance, @momentum, @bestintersection,
|
|---|
| 108 | $bestdelta, $theta) ;
|
|---|
| 109 |
|
|---|
| 110 | print TXT "@ret\n" ;
|
|---|
| 111 | }
|
|---|
| 112 |
|
|---|
| 113 |
|
|---|
| 114 |
|
|---|
| 115 | }
|
|---|
| 116 |
|
|---|
| 117 | print "$mcount events merged to file $txtfile\n" ;
|
|---|
| 118 |
|
|---|
| 119 | close FH ;
|
|---|
| 120 | close TXT ;
|
|---|
| 121 |
|
|---|
| 122 | print "start converting ascii $txtfile to hbook file $hbkfile...\n" ;
|
|---|
| 123 |
|
|---|
| 124 | system("export arg1=$txtfile; export arg2=$hbkfile; export arg3=$mcount ; paw -w 0 -b ntuple") && die "cannot create the ntuple in $hbkfile:$!\n" ;
|
|---|
| 125 |
|
|---|
| 126 | # delete the temporary ascii file. Comment out this line if needed.
|
|---|
| 127 | system("rm $txtfile") && die "cannot remove $txtfile.$!\n" ;
|
|---|
| 128 |
|
|---|
| 129 | print "\n\n" ;
|
|---|
| 130 |
|
|---|
| 131 | }
|
|---|
| 132 |
|
|---|