libGMT4.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 26 cfee523c4432
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B G M T . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Sun Jun 14 13:45:47 2015
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Sun Sep 27 09:23:46 2015
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2015 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 45 10 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# perl implementation of /Data/Makefiles/Makefile.GMT
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
# USAGE
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
# Basic Example
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
# -------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
# GMT_begin('temp_prof.ps','-JX10/-10','-R0/30/0/5000');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
# GMT_psxy('-W1,red');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
# print(GMT "$temp $depth\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
# GMT_end('-Ba5f1:"Temperature [degC]":/a500f100:"Depth [m]":WeSn');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
# Other GMT Utilities
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
# -------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
# GMT_pstext(<opts>)			x y size angle fontno justify(ML,BC,TR,...) "text"
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
# GMT_psbasemap(<opts>)			often implies GMT_end() w/o args
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
# GMT_psscale(<opts>)			scale bar
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
# Other Extensions
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
# ----------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
# GMT_unitcoords();				afterwards, x and y range from 0 to 1; useful for legends
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
# GMT_setR('-R0/1/0/1')			subsequent GMT utilities use this ROI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
# GMT_setJ('-JX10/-1-')			subsequent GMT utilities use this projection
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
# GMT_setAnnotFontSize(7)		set primary annotation font size
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
#	Jun 14, 2015: - created
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
#	Jun 16, 2015: - BUG: forgot to return to PWD
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
#	Jun 18, 2015: - added $DEBUG
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
#	Jul 26, 2015: - added usage documentation
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
#				  - simplified GMT_unitcoords()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
#	Jul 28, 2015: - added GMT_setAnnotFontSize(), GMT_psscale()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
$DEBUG = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
# Library
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
my($GMT_plotfile);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
my($GMT_J);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
my($GMT_R);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
sub GMT_setR($) { ($GMT_R) = @_; }						# (re-)define -R
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
sub GMT_setJ($) { ($GMT_J) = @_; }						# (re-)define -J
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
sub GMT_spawn($)										# spawn GMT command in temp dir
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
	my($cmd) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
	close(GMT);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
	chdir("/tmp/antsGMT.$$") ||
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
		croak("/tmp/antsGMT.$$: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
	print(STDERR "$cmd\n") if ($DEBUG);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
	open(GMT,$cmd) || croak("$cmd: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
	chdir("$ENV{PWD}") ||
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
		croak("$ENV{PWD}: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
sub GMT_set(@)											# set GMT defaults
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
	GMT_spawn("| gmtset @_");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
# GMT_begin(plot_file,J,R,extra_opts),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
#	e.g. GMT_begin('temp_prof.ps','-JX10/-10','-R0/30/0/5000');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
#		1) create temp directory
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
#		2) set GMT defaults
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
#		3) create plot file with empty psxy
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
my($LABEL_FONT_SIZE) = 14 unless defined($LABEL_FONT_SIZE);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
my($ANNOT_FONT_SIZE) = 14 unless defined($ANNOT_FONT_SIZE);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
sub GMT_begin(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
	my($pfn,$J,$R,$extra) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
	mkdir("/tmp/antsGMT.$$");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
	chdir("/tmp/antsGMT.$$") ||
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
		croak("/tmp/antsGMT.$$: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
	system("rm -f .gmt*
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
			gmtset MEASURE_UNIT cm PAPER_MEDIA letter \\
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
			       LABEL_FONT_SIZE ${LABEL_FONT_SIZE} \\
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
	               ANNOT_FONT_SIZE_PRIMARY ${ANNOT_FONT_SIZE} \\
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
	               WANT_EURO_FONT true \\
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
	               PLOT_DEGREE_FORMAT ddd:mm:ssF") &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
		croak("gmtset failed\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
	$GMT_plotfile = "$ENV{PWD}/$pfn";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
	GMT_setJ($J); GMT_setR($R);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
	GMT_spawn("| psxy -K $J $R $extra > $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
	close(GMT);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
sub GMT_setAnnotFontSize($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
	GMT_set("ANNOT_FONT_SIZE_PRIMARY $_[0]");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
# GMT_end(B)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
#	1) chdir to temp-dir
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
#	2) psbasemap w/o -K
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   114
#	3) close GMT file
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   115
#	4) remove GMT temp dir
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   116
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   117
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   118
sub GMT_end(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   119
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   120
	my($opt) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   121
	$opt = '-G' unless defined($opt);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   122
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   123
	GMT_spawn("| psbasemap -O $GMT_J $GMT_R $opt >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   124
	close(GMT);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   125
	chdir("$ENV{PWD}") || croak("ENV{PWD}: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   126
	system("rm -rf /tmp/antsGMT.$$") &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   127
		croak("Offending command: rm -rf /tmp/antsGMT.$$\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   128
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   129
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   130
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   131
# GMT_unitcoords()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   132
#	- set unit coordinate system
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   133
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   134
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   135
sub GMT_unitcoords()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   136
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   137
	GMT_setR('-R0/1/0/1');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   138
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   139
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   140
sub GMT_unitcoords_logscale()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   141
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   142
	($jx,$jy) = ($GMT_J =~ m{-J.-?(\d+)[a-z]*/-?(\d+)});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   143
	if (defined($jy)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   144
		GMT_setJ("-JX$jx/$jy");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   145
	} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   146
		($jx) = ($GMT_J =~ m{-J.-?(\d+)});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   147
		if (defined($jx)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   148
			GMT_setJ("-JX$jx");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   149
		} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   150
			croak("cannot decode $GMT_J ($jx,$jy)");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   151
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   152
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   153
	GMT_setR('-R0/1/0/1');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   154
#	GMT_spawn("| psxy -O -K $GMT_J $GMT_R >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   155
#	close(GMT);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   156
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   157
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   158
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   159
# GMT_psxy(opts)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   160
# GMT_psbasemap(opts)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   161
# GMT_pstext(opts)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   162
# GMT_psscale(opts)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   163
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   164
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   165
sub GMT_psxy(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   166
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   167
	my($opts) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   168
	GMT_spawn("| psxy -O -K $GMT_J $GMT_R $opts >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   169
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   170
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   171
sub GMT_psbasemap(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   172
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   173
	my($opts) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   174
	GMT_spawn("| psbasemap -O -K $GMT_J $GMT_R $opts >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   175
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   176
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   177
sub GMT_pstext(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   178
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   179
	my($opts) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   180
	GMT_spawn("| pstext -O -K $GMT_J $GMT_R $opts >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   181
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   182
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   183
sub GMT_psscale(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   184
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   185
	my($opts) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   186
	GMT_spawn("| psscale -O -K $opts >> $GMT_plotfile");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   187
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   188
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   189
1;