#!/usr/bin/perl
# 以下は変更する必要なし
#-----------------------------------------------------------------------------
#
# log2vec3 (version  $Id: eodv,v 1.4 2007/05/22 02:22:33 Exp $) 
#
# logをvec3にする算出
# 
# Usage:
# > log2vec3.pl hogehoge.csv 
#
# options:
#         特に無し
#
# example:
# log2vec3.pl hogehoge.csv                                #(1)
#
#-----------------------------------------------------------------------------
# Libraries
$cnt	= -2;	# ヘッダ行分指定する
$row0	= 1;
$row1 	= 104;	
$row2 	= 105;	
$row3 	= 106;
$row4 	= 204;	
$row5 	= 205;	
$row6 	= 206;	
$wtime	= 0.1;	# ウェイト時間[sec]
$xx	= 0;
$yy	= 0;
$zz	= 0;
$absxyz	= 0;
$sattime= 0;

#-----------------------------------------------------------------------------
# Code begin
#-----------------------------------------------------------------------------
($opt) = @ARGV; 
if ($opt eq "-h") 
{
    &show_usage();
    exit;
}

# オプションがない場合
#-----------------------------------------------------------------------------
if ($#ARGV == -1)
{
	print "Error:ファイル名を指定してください\n";
}

# オプションが１つある場合
#-----------------------------------------------------------------------------
if ($#ARGV == 0)
{
	# 対象ファイルのオープン
	open(IN,"<$ARGV[0]") || die "Error: can't open $ARGV[0]\n";
		@line = <IN>;
	close(IN);
	
	# gnuplot スクリプトヘッダ出力
	print "set term windows\n\n";
	print "set xrange[-1:1]\n";	
	print "set yrange[-1:1]\n";	
	print "set zrange[-1:1]\n";	

	foreach (@line)
	{
		# ヘッダ情報を飛ばす
		if ($cnt < 0){$cnt++; next;}
		
		# 要求トルクベクトル
		$xx	= (split(/\,/,$_))[$row1-1];
		$yy	= (split(/\,/,$_))[$row2-1];
		$zz	= (split(/\,/,$_))[$row3-1];

		$absxyz	= sqrt($xx*$xx+$yy*$yy+$zz*$zz);
		if($absxyz != 0)
		{
			$xx = $xx / $absxyz;
			$yy = $yy / $absxyz;
			$zz = $zz / $absxyz;
		}
		$disp = sprintf("set arrow from  0,0,0  to %e,%e,%e lw 2 lt 1\n",$xx,$yy,$zz);
		print $disp;

		# 地磁場ベクトル
		$xx	= (split(/\,/,$_))[$row4-1];
		$yy	= (split(/\,/,$_))[$row5-1];
		$zz	= (split(/\,/,$_))[$row6-1];

		$absxyz	= sqrt($xx*$xx+$yy*$yy+$zz*$zz);
		if($absxyz != 0)
		{
			$xx = $xx / $absxyz;
			$yy = $yy / $absxyz;
			$zz = $zz / $absxyz;
		}
		$disp = sprintf("set arrow from  0,0,0  to %e,%e,%e lw 2 lt 2\n",$xx,$yy,$zz);
		print $disp;
	
		# ダミープロット
		$sattime = (split(/\,/,$_))[$row0-1];
		$disp = sprintf("sp \"sample.dat\" ti \"time = %f\"\n",$sattime);
		print $disp;
		
		# pause時間
		$disp = sprintf("pause %f\n",$wtime);
		print $disp;
		
		# 古いvecをクリア
		print "unset arrow\n\n";
		
		# インクリメント処理
		$cnt++;
	}
	
	# ヘッダ出力
	$disp = sprintf("\n");
	print $disp;
}

# オプションが２つある場合
#-----------------------------------------------------------------------------
if ($#ARGV == 1)
{

}
exit;

#-----------------------------------------------------------------------------
# Sub code begin
#-----------------------------------------------------------------------------
sub show_usage()
{
  print "Usage:\n";
  print "> eodv [-h]\n";
  print "\n";
  print "options:\n";
  print "         -h : 利用方法を提示する\n";
  print "      -make : Level-2を更新する\n";
  print "\n";
  print "example:\n";
  print "eodv -h                         #(1) HELP\n";
}

