#!/usr/bin/perl -w use strict; use warnings; use Data::Dumper; use feature qw/ say /; BEGIN { use constant PI => 3.14159265358979; sub deg2rad { my $degrees = shift; return ($degrees / 180) * PI; } sub rad2deg { my $radians = shift; return ($radians / PI) * 180; } } my $num_args=$#ARGV+1; if($num_args < 3) { print "Usage: combine_doc.pl \n"; exit; } chomp(my $indoc_file1_name=$ARGV[0]); chomp(my $indoc_file2_name=$ARGV[1]); chomp(my $outdoc_file_name=$ARGV[2]); open INDOC1,"<$indoc_file1_name" || die "Can't open file: $!"; my $line=0; my @data; my @data_doc1; my $i=0; foreach () { if($line==0) { $line++; } elsif($line%2!=0) { @data=split(" ",$_); $data_doc1[$i]=$data[1]; $i++; $line++; } else { @data=split(" ",$_); $data_doc1[$i]=$data[2]; $data_doc1[$i+1]=$data[3]; $data_doc1[$i+2]=$data[4]; $data_doc1[$i+3]=$data[5]; $data_doc1[$i+4]=$data[6]; $data_doc1[$i+5]=$data[7]; $i+=6; $line++; } } print scalar(@data_doc1); print "\n"; #print "@data_doc1"; #print "\n"; open INDOC2,"<$indoc_file2_name" || die "Can't open file: $!"; $line=0; my @data_doc2; $i=0; foreach () { if($line==0) { $line++; } elsif($line%2!=0) { @data=split(" ",$_); $data_doc2[$i]=$data[1]; $i++; $line++; } else { @data=split(" ",$_); $data_doc2[$i]=$data[2]; $data_doc2[$i+1]=$data[3]; $data_doc2[$i+2]=$data[4]; $data_doc2[$i+3]=$data[5]; $data_doc2[$i+4]=$data[6]; $data_doc2[$i+5]=$data[7]; $i+=6; $line++; } } #print scalar(@data_doc2); #print "\n"; #print "@data_doc2"; #print "\n"; open OUTDOC,">$outdoc_file_name" || die "Can't open file: $!"; print OUTDOC " ; Headerinfo columns: rot (1), tilt (2), psi (3), Xoff (4), Yoff (5), Zoff (6), Ref (7), Wedge (8), Pmax/sumP (9), LL (10)\n"; my $rot_mat1; my $rot_mat2; my $part_id; my $cbn_mat; my @cbn_angles; my @cbn_shifts; for($i=1;$i[$i][$j]+=$mat1->[$i][$k] * $mat2->[$k][$j]; } } } return $result_mat; } sub mat2eul { my @cbn_mat=@{$_[0]}; my $theta_deg=rad2deg(atan2((sqrt($cbn_mat[2][0]**2+$cbn_mat[2][1]**2)),$cbn_mat[2][2])); my $phi_deg=rad2deg(atan2(($cbn_mat[1][2]/sin(deg2rad($theta_deg))),(-$cbn_mat[0][2]/sin(deg2rad($theta_deg))))); my $psi_deg=rad2deg(atan2(($cbn_mat[2][1]/sin(deg2rad($theta_deg))),($cbn_mat[2][0]/sin(deg2rad($theta_deg))))); return ($theta_deg,$phi_deg,$psi_deg); }