| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Simulation::Automate::PostProcLib; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
5
|
use vars qw( $VERSION ); |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
99
|
|
|
4
|
|
|
|
|
|
|
$VERSION = "1.0.1"; |
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
################################################################################ |
|
7
|
|
|
|
|
|
|
# # |
|
8
|
|
|
|
|
|
|
# Copyright (C) 2000,2002 Wim Vanderbauwhede. All rights reserved. # |
|
9
|
|
|
|
|
|
|
# This program is free software; you can redistribute it and/or modify it # |
|
10
|
|
|
|
|
|
|
# under the same terms as Perl itself. # |
|
11
|
|
|
|
|
|
|
# # |
|
12
|
|
|
|
|
|
|
################################################################################ |
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
#=headers |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
#Module to support synsim script for simulation automation. |
|
17
|
|
|
|
|
|
|
#This module contains a set of utility functions for use in the |
|
18
|
|
|
|
|
|
|
#PostProcessors.pm module. |
|
19
|
|
|
|
|
|
|
#This module is generic. |
|
20
|
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
#$Id$ |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
#=cut |
|
24
|
|
|
|
|
|
|
|
|
25
|
1
|
|
|
1
|
|
5
|
use warnings; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
41
|
|
|
26
|
1
|
|
|
1
|
|
5
|
use strict; |
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
25
|
|
|
27
|
1
|
|
|
1
|
|
5
|
use Carp; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
58
|
|
|
28
|
1
|
|
|
1
|
|
5
|
use Exporter; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
32
|
|
|
29
|
1
|
|
|
1
|
|
5
|
use lib '.','..'; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
5
|
|
|
30
|
|
|
|
|
|
|
|
|
31
|
1
|
|
|
1
|
|
148
|
use Simulation::Automate::Analysis; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
98
|
|
|
32
|
1
|
|
|
1
|
|
388
|
use Simulation::Automate::Dictionary; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
200
|
|
|
33
|
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
@Simulation::Automate::PostProcLib::ISA = qw(Exporter); |
|
35
|
|
|
|
|
|
|
@Simulation::Automate::PostProcLib::EXPORT = qw( |
|
36
|
|
|
|
|
|
|
&prepare_plot |
|
37
|
|
|
|
|
|
|
&prepare |
|
38
|
|
|
|
|
|
|
&gnuplot |
|
39
|
|
|
|
|
|
|
&gnuplot_combined |
|
40
|
|
|
|
|
|
|
%simdata |
|
41
|
|
|
|
|
|
|
$last |
|
42
|
|
|
|
|
|
|
$verylast |
|
43
|
|
|
|
|
|
|
$every_sweep_val |
|
44
|
|
|
|
|
|
|
$current_set_str |
|
45
|
|
|
|
|
|
|
$current_set_except_setvar_str |
|
46
|
|
|
|
|
|
|
$results_file_name |
|
47
|
|
|
|
|
|
|
@all_results_file_names |
|
48
|
|
|
|
|
|
|
%current_set_vals |
|
49
|
|
|
|
|
|
|
@results |
|
50
|
|
|
|
|
|
|
&import_symbols |
|
51
|
|
|
|
|
|
|
$verbose |
|
52
|
|
|
|
|
|
|
); |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
################################################################################## |
|
55
|
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
sub AUTOLOAD { |
|
57
|
0
|
|
|
0
|
|
0
|
my $subref=$Simulation::Automate::PostProcLib::AUTOLOAD; |
|
58
|
0
|
|
|
|
|
0
|
$subref=~s/.*:://; |
|
59
|
0
|
|
|
|
|
0
|
print STDERR " |
|
60
|
|
|
|
|
|
|
There is no script for this analysis in the PostProcLib.pm module. |
|
61
|
|
|
|
|
|
|
This might not be what you intended. |
|
62
|
|
|
|
|
|
|
You can add your own subroutine $subref to the PostProcLib.pm module. |
|
63
|
|
|
|
|
|
|
"; |
|
64
|
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
} |
|
66
|
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
68
|
|
|
|
|
|
|
sub prepare { |
|
69
|
|
|
|
|
|
|
#print "Entering prepare()\n"; |
|
70
|
1
|
|
|
1
|
|
4
|
use Cwd; |
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
2551
|
|
|
71
|
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
#*&Simulation::Automate::PostProcessors::$subref(\$dataset,\$i,\$dataref1,\$flagsref,\$returnvalue,\$preprocref); |
|
73
|
|
|
|
|
|
|
#&prepare_plot(@args); |
|
74
|
|
|
|
|
|
|
# print "PREPARE\n"; |
|
75
|
2
|
|
|
2
|
0
|
8
|
my $datafile_name=shift; |
|
76
|
2
|
|
|
|
|
6
|
my $count=shift; |
|
77
|
2
|
|
|
|
|
4
|
my $dataref=shift; |
|
78
|
2
|
|
|
|
|
7
|
my $flagsref=shift; |
|
79
|
2
|
|
|
|
|
4
|
my $verylastref=shift; |
|
80
|
2
|
|
|
|
|
8
|
my @extra_args=@_; |
|
81
|
|
|
|
|
|
|
|
|
82
|
2
|
50
|
33
|
|
|
93
|
my $preprocref=((@extra_args>=1) && $extra_args[0])?$extra_args[0]:0; |
|
83
|
|
|
|
|
|
|
|
|
84
|
2
|
50
|
33
|
|
|
10
|
my $every_sweep_val=((@extra_args==2) && ($extra_args[1]==2))?1:0; |
|
85
|
2
|
|
|
|
|
6
|
my $verylast=1; |
|
86
|
2
|
|
|
|
|
7
|
my @results=(); |
|
87
|
|
|
|
|
|
|
|
|
88
|
2
|
100
|
66
|
|
|
29
|
if($verylastref && $verylastref!=1){ |
|
89
|
1
|
|
|
|
|
1
|
@results=@{$verylastref}; |
|
|
1
|
|
|
|
|
5
|
|
|
90
|
1
|
|
|
|
|
3
|
$verylast=0; |
|
91
|
|
|
|
|
|
|
} |
|
92
|
|
|
|
|
|
|
|
|
93
|
2
|
|
|
|
|
3
|
(my $batch, $Simulation::Automate::PostProcLib::interactive,my $nosims,$Simulation::Automate::PostProcLib::plot,$Simulation::Automate::PostProcLib::verbose)=@{$flagsref}; |
|
|
2
|
|
|
|
|
12
|
|
|
94
|
2
|
|
|
|
|
5
|
my $copy_results=1; |
|
95
|
2
|
|
|
|
|
3
|
(my $nsims, my $simdataref,my $current_set_valsref,my $lastref)=@{$dataref}; |
|
|
2
|
|
|
|
|
8
|
|
|
96
|
|
|
|
|
|
|
|
|
97
|
2
|
|
|
|
|
6
|
my %synsimdata=%{$simdataref}; |
|
|
2
|
|
|
|
|
38
|
|
|
98
|
2
|
|
|
|
|
4
|
my %current_set_vals=%{$current_set_valsref}; |
|
|
2
|
|
|
|
|
6
|
|
|
99
|
|
|
|
|
|
|
#to be exported: current_set_str |
|
100
|
2
|
|
|
|
|
7
|
my $current_set_str=''; |
|
101
|
2
|
|
|
|
|
13
|
foreach my $key (sort keys %current_set_vals) { |
|
102
|
0
|
|
|
|
|
0
|
$current_set_str.="${key}-".$current_set_vals{$key}.'-'; |
|
103
|
|
|
|
|
|
|
} |
|
104
|
2
|
|
|
|
|
5
|
$current_set_str=~s/-$//; |
|
105
|
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
#The idea is to use XVAR or SWEEPVAR for any X-value sweep. As there is no longer a requirement to have semicol-lists for grouping, if XVAR is not semicol, make it semicol. |
|
107
|
|
|
|
|
|
|
#If there was a semicol-list, make it comma. |
|
108
|
|
|
|
|
|
|
#If there were 2 or more semicol lists, add them to %grouped |
|
109
|
|
|
|
|
|
|
#CONDVAR must only be defined if a CONDITION is present. In this case, CONDVAR is swept, XVAR is stepped, so XVAR should be a comma-separated list. If not, make it one. Again, if semicol grouping is used, convert to new grouping |
|
110
|
|
|
|
|
|
|
#So, internally: |
|
111
|
|
|
|
|
|
|
#(COND or CONDITION) { |
|
112
|
|
|
|
|
|
|
#XVAR=SETVAR |
|
113
|
|
|
|
|
|
|
#SWEEPVAR=CONDVAR |
|
114
|
|
|
|
|
|
|
#} else { |
|
115
|
|
|
|
|
|
|
#XVAR=SWEEPVAR |
|
116
|
|
|
|
|
|
|
#} |
|
117
|
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
|
|
119
|
2
|
|
50
|
|
|
21
|
my $setvar=$synsimdata{SETVAR}||''; |
|
120
|
2
|
50
|
33
|
|
|
20
|
if(exists $synsimdata{COND} or exists $synsimdata{CONDITION}) { |
|
121
|
|
|
|
|
|
|
# my $condvar= $synsimdata{CONDVAR}||$synsimdata{SWEEPVAR}||'none'; |
|
122
|
|
|
|
|
|
|
#WV 010704: only CONDVAR, not SWEEPVAR |
|
123
|
0
|
|
0
|
|
|
0
|
my $condvar= $synsimdata{CONDVAR}||'none'; |
|
124
|
|
|
|
|
|
|
# $synsimdata{CONDVAR}=$synsimdata{SWEEPVAR}=$condvar; |
|
125
|
0
|
|
0
|
|
|
0
|
my $xvar= $synsimdata{XVAR}|| $synsimdata{SETVAR}||$synsimdata{SWEEPVAR}||''; |
|
126
|
0
|
|
|
|
|
0
|
$synsimdata{XVAR}=$synsimdata{SETVAR}=$synsimdata{SWEEPVAR}=$xvar; |
|
127
|
0
|
|
|
|
|
0
|
$setvar=$xvar; |
|
128
|
|
|
|
|
|
|
} else { |
|
129
|
2
|
|
50
|
|
|
27
|
my $xvar= $synsimdata{XVAR}|| $synsimdata{SWEEPVAR}||''; |
|
130
|
2
|
|
|
|
|
10
|
$synsimdata{XVAR}=$synsimdata{SWEEPVAR}=$xvar; |
|
131
|
|
|
|
|
|
|
} |
|
132
|
|
|
|
|
|
|
|
|
133
|
2
|
|
50
|
|
|
23
|
my $cond=$synsimdata{COND}||$synsimdata{CONDITION}||'<1'; |
|
134
|
2
|
|
|
|
|
11
|
$synsimdata{COND}=$synsimdata{CONDITION}=$cond; |
|
135
|
|
|
|
|
|
|
|
|
136
|
2
|
|
|
|
|
9
|
my $setvarval=$synsimdata{$setvar}->[0]; # if SETVAR is defined, this would be the first value in the list for SETVAR. This is to used check if the last element in the SETVAR value list has been reached |
|
137
|
2
|
|
|
|
|
4
|
my $current_set_except_setvar_str=$current_set_str; |
|
138
|
2
|
50
|
|
|
|
10
|
my $setvar_str=($setvar ne '')?$setvar.'-'.$setvarval:''; |
|
139
|
2
|
|
|
|
|
32
|
$current_set_except_setvar_str=~s/$setvar_str\-*//; |
|
140
|
|
|
|
|
|
|
|
|
141
|
2
|
|
|
|
|
4
|
my %last=%{$lastref}; # the last value in the list for every variable |
|
|
2
|
|
|
|
|
6
|
|
|
142
|
|
|
|
|
|
|
|
|
143
|
2
|
|
0
|
|
|
13
|
my $last=($setvar && (exists $last{$setvar}) && ($setvar ne '') && $setvarval && ($setvarval==$last{$setvar})); # SETVAR is defined and the element in the value list has been reached. |
|
144
|
|
|
|
|
|
|
|
|
145
|
2
|
|
50
|
|
|
33
|
$synsimdata{OUTPUT_FILTER_PATTERN}||= '.*'; |
|
146
|
|
|
|
|
|
|
|
|
147
|
2
|
|
50
|
|
|
31
|
my $plotext=$synsimdata{PLOTTEMPL}||$synsimdata{PLOTTEMPLATE}||$synsimdata{PLOT_TEMPLATE}||'.gnuplot'; |
|
148
|
2
|
|
|
|
|
8
|
$synsimdata{PLOTTEMPL}=$synsimdata{PLOTTEMPLATE}=$synsimdata{PLOT_TEMPLATE}=$plotext; |
|
149
|
|
|
|
|
|
|
|
|
150
|
2
|
|
50
|
|
|
13
|
$synsimdata{PLOTCOMMAND}||='/usr/bin/ggv'; |
|
151
|
2
|
50
|
33
|
|
|
169
|
if((not -e '/usr/bin/ggv') and ( -e '/usr/X11R6/bin/gv')) { |
|
152
|
0
|
|
0
|
|
|
0
|
$synsimdata{PLOTCOMMAND}||='/usr/X11R6/bin/gv'; |
|
153
|
|
|
|
|
|
|
} |
|
154
|
2
|
|
50
|
|
|
35
|
my $normvar=$synsimdata{NORMVAR}||1; |
|
155
|
2
|
50
|
33
|
|
|
16
|
(!$synsimdata{$normvar} || !@{$synsimdata{$normvar}})&&(${$synsimdata{$normvar}}[0]=1); |
|
|
2
|
|
|
|
|
10
|
|
|
|
0
|
|
|
|
|
0
|
|
|
156
|
2
|
50
|
|
|
|
3
|
my $current_norm_val=(@{$synsimdata{$normvar}}>1)?$current_set_vals{$normvar}:${$synsimdata{$normvar}}[0]; |
|
|
2
|
|
|
|
|
7
|
|
|
|
2
|
|
|
|
|
5
|
|
|
157
|
2
|
|
|
|
|
8
|
$synsimdata{NORMVAR}=$normvar; |
|
158
|
|
|
|
|
|
|
|
|
159
|
2
|
50
|
50
|
|
|
20
|
(exists $synsimdata{XVAR}) && ($synsimdata{XCOL}||=1); |
|
160
|
2
|
|
50
|
|
|
21
|
my $datacol=$synsimdata{DATACOL}||$synsimdata{YCOL}||1; |
|
161
|
2
|
|
|
|
|
5
|
$synsimdata{DATACOL}=$synsimdata{YCOL}=$datacol; |
|
162
|
|
|
|
|
|
|
|
|
163
|
2
|
|
33
|
|
|
22
|
my $simtempl=$synsimdata{SIMULATION}||$synsimdata{SIMNAME}||$synsimdata{SIMTYPE}||$synsimdata{TEMPLATE}||$synsimdata{SIMTEMPL}; |
|
164
|
2
|
|
|
|
|
16
|
$synsimdata{SIMULATION}=$synsimdata{SIMNAME}=$synsimdata{SIMTYPE}=$synsimdata{TEMPLATE}=$synsimdata{SIMTEMPL}=$simtempl; |
|
165
|
|
|
|
|
|
|
|
|
166
|
2
|
|
50
|
|
|
36
|
my $anatempl=$synsimdata{ANALYSIS_TEMPLATE}||$synsimdata{ANALYSIS}||$synsimdata{ANATEMPL}||'None'; |
|
167
|
2
|
|
|
|
|
10
|
$synsimdata{ANALYSIS_TEMPLATE}=$synsimdata{ANALYSIS}=$synsimdata{ANATEMPL}=$anatempl; |
|
168
|
|
|
|
|
|
|
|
|
169
|
2
|
|
|
|
|
9
|
my $results_file_name=$simtempl.'-'.$anatempl.'-'.$current_set_str.'.res'; |
|
170
|
|
|
|
|
|
|
|
|
171
|
|
|
|
|
|
|
#NEW 24/11/2003 Copy "old" results files to new names |
|
172
|
2
|
100
|
|
|
|
5
|
if(not $verylast){ |
|
173
|
1
|
|
|
|
|
8108
|
system("cp ${simtempl}_C${count}.res $results_file_name"); |
|
174
|
|
|
|
|
|
|
} |
|
175
|
2
|
|
50
|
|
|
312
|
my $devtype=$synsimdata{DEVTYPE}|| $synsimdata{DEVICE}||''; |
|
176
|
2
|
|
|
|
|
23
|
$synsimdata{DEVTYPE}=$synsimdata{DEVICE}=$devtype; |
|
177
|
2
|
|
33
|
|
|
19
|
$synsimdata{TITLE}||="$devtype $simtempl simulation"; |
|
178
|
2
|
|
|
|
|
13
|
my $simtitle = my $title = $synsimdata{TITLE}; |
|
179
|
2
|
|
|
|
|
59
|
foreach my $key (keys %synsimdata) { |
|
180
|
56
|
50
|
|
|
|
129
|
($key!~/^_/) && next; |
|
181
|
0
|
0
|
|
|
|
0
|
($simtitle=~/$key/) && do { |
|
182
|
0
|
|
|
|
|
0
|
my $val=$synsimdata{$key}; |
|
183
|
0
|
|
0
|
|
|
0
|
my $nicekey=$make_nice{$key}{title}||&make_nice($key); |
|
184
|
0
|
|
0
|
|
|
0
|
my $niceval=$make_nice{$key}{${$val}[0]}||join(',',@{$val}); |
|
185
|
0
|
|
|
|
|
0
|
$simtitle=~s/$key/$nicekey:\ $niceval/; |
|
186
|
|
|
|
|
|
|
}; |
|
187
|
0
|
|
|
|
|
0
|
$title=$simtitle; |
|
188
|
|
|
|
|
|
|
} |
|
189
|
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
# For Gnuplot |
|
191
|
|
|
|
|
|
|
#XSTART, XSTOP, YSTART, YSTOP, XTICS, YTICS, YLABEL, XLABEL, LOGSCALE, STYLE, |
|
192
|
2
|
|
50
|
|
|
29
|
$synsimdata{XSTART}||=""; |
|
193
|
2
|
|
50
|
|
|
16
|
$synsimdata{XSTOP}||=""; |
|
194
|
2
|
|
50
|
|
|
14
|
$synsimdata{YSTART}||=""; |
|
195
|
2
|
|
50
|
|
|
32
|
$synsimdata{YSTOP}||=""; |
|
196
|
2
|
|
50
|
|
|
26
|
$synsimdata{XTICS}||=""; |
|
197
|
2
|
|
50
|
|
|
16
|
$synsimdata{YTICS}||=""; |
|
198
|
2
|
|
33
|
|
|
14
|
$synsimdata{YLABEL}||="$title"; |
|
199
|
2
|
|
33
|
|
|
29
|
$synsimdata{XLABEL}||=&make_nice($synsimdata{XVAR});#"$title"; |
|
200
|
2
|
50
|
|
|
|
11
|
$synsimdata{LOGSCALE}=($synsimdata{LOGSCALE})?"set nologscale xy\nset logscale ".lc($synsimdata{LOGSCALE}):'set nologscale xy'; |
|
201
|
2
|
|
50
|
|
|
19
|
my $plotstyle=$synsimdata{PLOTSTYLE}||$synsimdata{STYLE}||'linespoints'; |
|
202
|
2
|
|
|
|
|
10
|
$synsimdata{PLOTSTYLE}=$synsimdata{STYLE}=$plotstyle; |
|
203
|
2
|
|
|
|
|
10
|
$synsimdata{DATAFILENAME}=$datafile_name; |
|
204
|
2
|
|
|
|
|
2
|
(my $legendtitle, my $legend)=@{&create_legend($current_set_str,\%make_nice)}; |
|
|
2
|
|
|
|
|
23
|
|
|
205
|
2
|
|
|
|
|
260
|
my @all_results_file_names=glob($simtempl.'-'.$anatempl.'*.res'); |
|
206
|
|
|
|
|
|
|
|
|
207
|
2
|
|
|
|
|
8
|
@Simulation::Automate::PostProcLib::all_results_file_names=@all_results_file_names; |
|
208
|
2
|
|
|
|
|
23
|
@Simulation::Automate::PostProcLib::results=@results; |
|
209
|
2
|
|
|
|
|
150
|
%Simulation::Automate::PostProcLib::simdata=%synsimdata; |
|
210
|
2
|
|
|
|
|
20
|
%Simulation::Automate::PostProcLib::current_set_vals=%current_set_vals; |
|
211
|
2
|
|
|
|
|
4
|
$Simulation::Automate::PostProcLib::results_file_name=$results_file_name; |
|
212
|
2
|
|
|
|
|
4
|
$Simulation::Automate::PostProcLib::current_set_str=$current_set_str; |
|
213
|
2
|
|
|
|
|
4
|
$Simulation::Automate::PostProcLib::current_set_except_setvar_str=$current_set_except_setvar_str; |
|
214
|
2
|
|
|
|
|
12
|
$Simulation::Automate::PostProcLib::verylast=$verylast; |
|
215
|
2
|
|
|
|
|
8
|
$Simulation::Automate::PostProcLib::last=$last; |
|
216
|
2
|
|
|
|
|
7
|
$Simulation::Automate::PostProcLib::simtempl=$simtempl; |
|
217
|
2
|
|
|
|
|
4
|
$Simulation::Automate::PostProcLib::anatempl=$anatempl; |
|
218
|
2
|
|
|
|
|
7
|
$Simulation::Automate::PostProcLib::plotext=$plotext; |
|
219
|
|
|
|
|
|
|
# if ($preprocref!=0) { |
|
220
|
|
|
|
|
|
|
# eval('use Simulation::Automate::PostProcessors;'); |
|
221
|
|
|
|
|
|
|
# &{$preprocref}(); |
|
222
|
|
|
|
|
|
|
# } |
|
223
|
|
|
|
|
|
|
#%Simulation::Automate::PostProcessors::simdata=%synsimdata; |
|
224
|
|
|
|
|
|
|
#@Simulation::Automate::PostProcessors::results=@results; |
|
225
|
|
|
|
|
|
|
|
|
226
|
2
|
|
|
|
|
11
|
&import_symbols(); |
|
227
|
2
|
|
|
|
|
17
|
my $postprocpath= $INC{"Simulation/Automate/PostProcLib.pm"}; |
|
228
|
2
|
|
|
|
|
22
|
$postprocpath=~s/Lib/essors/; |
|
229
|
2
|
50
|
|
|
|
12
|
($postprocpath=~/^\./)&&($postprocpath='../'.$postprocpath); |
|
230
|
2
|
|
|
|
|
1189
|
require $postprocpath; |
|
231
|
|
|
|
|
|
|
|
|
232
|
2
|
|
|
|
|
9789
|
my $workingdir=cwd(); |
|
233
|
2
|
50
|
|
|
|
106
|
if( -d "../PLUGINS") { |
|
234
|
2
|
|
|
|
|
237
|
my @preprocs=glob("../PLUGINS/*.pm"); |
|
235
|
2
|
|
|
|
|
13
|
foreach my $plugin (@preprocs) { |
|
236
|
2
|
50
|
33
|
|
|
191
|
if($synsimdata{PREPROCESSOR} && ($plugin=~/$synsimdata{PREPROCESSOR}/) or $synsimdata{POSTPROCESSOR} && ($plugin=~/$synsimdata{POSTPROCESSOR}/) or ($plugin=~/$synsimdata{ANATEMPL}\.pm/)) { |
|
|
|
|
33
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
237
|
0
|
|
|
|
|
0
|
require $plugin; |
|
238
|
|
|
|
|
|
|
} |
|
239
|
|
|
|
|
|
|
} |
|
240
|
|
|
|
|
|
|
} |
|
241
|
2
|
50
|
|
|
|
31
|
if(exists $synsimdata{PREPROCESSOR}) { |
|
242
|
|
|
|
|
|
|
#print "Calling preprocessor $synsimdata{PREPROCESSOR} from prepare\n"; |
|
243
|
|
|
|
|
|
|
#@_= @Simulation::Automate::PostProcLib::results; |
|
244
|
0
|
|
|
|
|
0
|
eval('&Simulation::Automate::PostProcessors::'.$synsimdata{PREPROCESSOR});#.'(@_)'); |
|
245
|
|
|
|
|
|
|
# @Simulation::Automate::PostProcLib::results=@_; |
|
246
|
|
|
|
|
|
|
} |
|
247
|
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
#print "Calling Simulation::Automate::PostProcessors::$synsimdata{ANATEMPL} from prepare\n"; |
|
249
|
2
|
50
|
|
|
|
16
|
if( $synsimdata{ANATEMPL} ne 'None' ) { |
|
250
|
0
|
|
|
|
|
0
|
eval('&Simulation::Automate::PostProcessors::'.$synsimdata{ANATEMPL}); |
|
251
|
|
|
|
|
|
|
} |
|
252
|
|
|
|
|
|
|
|
|
253
|
|
|
|
|
|
|
#print "Leaving prepare()\n"; |
|
254
|
2
|
|
|
|
|
326
|
return [@_]; |
|
255
|
|
|
|
|
|
|
} # END of prepare() |
|
256
|
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
258
|
|
|
|
|
|
|
sub gnuplot { |
|
259
|
0
|
|
|
0
|
0
|
0
|
my $commands=shift; |
|
260
|
0
|
|
0
|
|
|
0
|
my $persist=shift||''; |
|
261
|
0
|
0
|
|
|
|
0
|
if($Simulation::Automate::PostProcLib::plot) { |
|
262
|
0
|
|
|
|
|
0
|
open GNUPLOT,"| gnuplot $persist"; |
|
263
|
0
|
|
|
|
|
0
|
print GNUPLOT $commands; |
|
264
|
0
|
|
|
|
|
0
|
close GNUPLOT; |
|
265
|
|
|
|
|
|
|
} |
|
266
|
|
|
|
|
|
|
} # END of gnuplot() |
|
267
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
268
|
|
|
|
|
|
|
sub gnuplot_combined { |
|
269
|
|
|
|
|
|
|
#my $firstplotline=shift||''; |
|
270
|
|
|
|
|
|
|
#my $plotlinetempl=shift||''; |
|
271
|
|
|
|
|
|
|
#my $col=$Simulation::Automate::PostProcLib::datacol; |
|
272
|
|
|
|
|
|
|
#my $ycol=$Simulation::Automate::PostProcLib::ycol; |
|
273
|
|
|
|
|
|
|
#if($firstplotline=~/^\d+$/) { |
|
274
|
|
|
|
|
|
|
#$ycol=$firstplotline; |
|
275
|
|
|
|
|
|
|
#$firstplotline=''; |
|
276
|
|
|
|
|
|
|
#} |
|
277
|
0
|
|
|
0
|
0
|
0
|
my $firstplotline=''; |
|
278
|
0
|
|
|
|
|
0
|
my $plotlinetempl=''; |
|
279
|
|
|
|
|
|
|
#my $synsimdataref=shift; |
|
280
|
|
|
|
|
|
|
#my %synsimdata=%Simulation::Automate::PostProcLib::synsimdata; |
|
281
|
0
|
|
|
|
|
0
|
my %synsimdata=%Simulation::Automate::PostProcLib::simdata; |
|
282
|
0
|
|
|
|
|
0
|
$synsimdata{YCOL}= $Simulation::Automate::PostProcLib::ycol; |
|
283
|
|
|
|
|
|
|
|
|
284
|
|
|
|
|
|
|
### On the very last run, collect the results |
|
285
|
|
|
|
|
|
|
#1. get a list of all plot files |
|
286
|
0
|
|
|
|
|
0
|
my @plotfiles=glob("${Simulation::Automate::PostProcLib::simtempl}-${Simulation::Automate::PostProcLib::anatempl}-*.res"); |
|
287
|
|
|
|
|
|
|
|
|
288
|
|
|
|
|
|
|
#2. create a gnuplot script |
|
289
|
|
|
|
|
|
|
#this should be a full script, but with room for additional feature |
|
290
|
0
|
|
|
|
|
0
|
my @lines=(); |
|
291
|
0
|
|
|
|
|
0
|
my $legendtitle=''; |
|
292
|
0
|
|
|
|
|
0
|
my $lt=0; |
|
293
|
0
|
|
|
|
|
0
|
my $range=''; |
|
294
|
0
|
|
|
|
|
0
|
foreach my $filename (@plotfiles) { |
|
295
|
0
|
|
|
|
|
0
|
$lt++; |
|
296
|
0
|
|
|
|
|
0
|
my $title=$filename; |
|
297
|
|
|
|
|
|
|
|
|
298
|
0
|
|
|
|
|
0
|
$title=~s/${Simulation::Automate::PostProcLib::simtempl}-${Simulation::Automate::PostProcLib::anatempl}-//; |
|
299
|
0
|
|
|
|
|
0
|
$title=~s/\.res//; |
|
300
|
0
|
|
|
|
|
0
|
$title=~s/\-\-/\-\_MINUS_/g; |
|
301
|
|
|
|
|
|
|
#(my $legendkey,my $legendvalue)=split('-',$title); |
|
302
|
0
|
|
|
|
|
0
|
my %legend=split('-',$title); |
|
303
|
0
|
|
|
|
|
0
|
my @legendkeys=(); |
|
304
|
0
|
|
|
|
|
0
|
my @legendvalues=(); |
|
305
|
0
|
|
|
|
|
0
|
foreach my $varname (sort keys %legend){ |
|
306
|
0
|
|
|
|
|
0
|
push @legendkeys,$varname; |
|
307
|
0
|
|
|
|
|
0
|
push @legendvalues,$legend{$varname}; |
|
308
|
|
|
|
|
|
|
} |
|
309
|
0
|
|
|
|
|
0
|
my $legendkey=''; |
|
310
|
0
|
|
|
|
|
0
|
$legendkey.=join(', ',@legendkeys); |
|
311
|
0
|
|
|
|
|
0
|
my $legendvalue=''; |
|
312
|
0
|
|
|
|
|
0
|
$legendvalue.=join(', ', @legendvalues); |
|
313
|
|
|
|
|
|
|
|
|
314
|
|
|
|
|
|
|
#$legendkey||=' '; |
|
315
|
0
|
0
|
|
|
|
0
|
($legendkey eq '') && ( $legendkey=' '); |
|
316
|
0
|
0
|
|
|
|
0
|
($legendvalue eq '') && ($legendvalue=' '); |
|
317
|
|
|
|
|
|
|
#($legendvalue=~/^\d+$/)&&($legendvalue!=0) && ($legendvalue||=' '); |
|
318
|
0
|
0
|
|
|
|
0
|
($legendkey=~/_MINUS_/)&&($legendkey=~s/_MINUS_/\-/g); |
|
319
|
0
|
0
|
|
|
|
0
|
($legendvalue=~/_MINUS_/)&&($legendvalue=~s/_MINUS_/\-/g); |
|
320
|
|
|
|
|
|
|
|
|
321
|
0
|
|
|
|
|
0
|
my %title= ($legendkey=>$legendvalue); |
|
322
|
|
|
|
|
|
|
|
|
323
|
0
|
|
|
|
|
0
|
my $legend=''; |
|
324
|
0
|
|
|
|
|
0
|
$legendtitle=''; |
|
325
|
0
|
|
|
|
|
0
|
foreach my $key (sort keys %title) { |
|
326
|
0
|
|
|
|
|
0
|
$legendtitle.=','; |
|
327
|
0
|
|
0
|
|
|
0
|
$legendtitle.=$make_nice{$key}{title}||&make_nice($key); |
|
328
|
0
|
|
0
|
|
|
0
|
$legend.=$make_nice{$key}{$title{$key}}||&make_nice($title{$key}); |
|
329
|
0
|
|
|
|
|
0
|
$legend.=','; |
|
330
|
|
|
|
|
|
|
} |
|
331
|
0
|
|
|
|
|
0
|
$legend=~s/,$//; |
|
332
|
0
|
|
|
|
|
0
|
$legendtitle=~s/^,//; |
|
333
|
0
|
|
|
|
|
0
|
$synsimdata{LEGEND}=$legend; |
|
334
|
0
|
|
|
|
|
0
|
$synsimdata{LEGENDTITLE}=$legendtitle; |
|
335
|
|
|
|
|
|
|
|
|
336
|
0
|
0
|
0
|
|
|
0
|
if(($firstplotline eq '') and ($plotlinetempl eq '')){ |
|
337
|
0
|
|
|
|
|
0
|
($firstplotline, $plotlinetempl,$range)=@{&parse_gnuplot_templ(\%synsimdata)}; |
|
|
0
|
|
|
|
|
0
|
|
|
338
|
|
|
|
|
|
|
} |
|
339
|
|
|
|
|
|
|
|
|
340
|
0
|
|
|
|
|
0
|
my $plotline; |
|
341
|
|
|
|
|
|
|
#print "PLOTLINE:", '$plotline='.$plotlinetempl; |
|
342
|
0
|
|
|
|
|
0
|
eval('$plotline='.$plotlinetempl); |
|
343
|
|
|
|
|
|
|
#carp "PLOTLINE:$plotline"; |
|
344
|
0
|
|
|
|
|
0
|
push @lines, $plotline |
|
345
|
|
|
|
|
|
|
} |
|
346
|
0
|
|
|
|
|
0
|
$firstplotline=~s/set\s+key\s+title.*/set key title "$legendtitle"/; |
|
347
|
0
|
|
|
|
|
0
|
my $plot="\nplot $range "; |
|
348
|
0
|
0
|
|
|
|
0
|
if($firstplotline=~/$plot/ms){$plot=''}; |
|
|
0
|
|
|
|
|
0
|
|
|
349
|
0
|
|
|
|
|
0
|
my $line=$firstplotline.$plot.join(",\\\n",@lines); |
|
350
|
|
|
|
|
|
|
|
|
351
|
0
|
0
|
|
|
|
0
|
if($Simulation::Automate::PostProcLib::plot) { |
|
352
|
0
|
|
|
|
|
0
|
open GNUPLOT,"| gnuplot"; |
|
353
|
0
|
|
|
|
|
0
|
print GNUPLOT $line; |
|
354
|
0
|
|
|
|
|
0
|
close GNUPLOT; |
|
355
|
|
|
|
|
|
|
} |
|
356
|
0
|
|
|
|
|
0
|
open GNUPLOT,">${Simulation::Automate::PostProcLib::simtempl}-${Simulation::Automate::PostProcLib::anatempl}.gnuplot"; |
|
357
|
0
|
|
|
|
|
0
|
print GNUPLOT $line; |
|
358
|
0
|
|
|
|
|
0
|
close GNUPLOT; |
|
359
|
|
|
|
|
|
|
|
|
360
|
0
|
0
|
|
|
|
0
|
if($Simulation::Automate::PostProcLib::interactive) { |
|
361
|
0
|
|
|
|
|
0
|
system("${Simulation::Automate::PostProcLib::plotcommand} ${Simulation::Automate::PostProcLib::simtempl}-${Simulation::Automate::PostProcLib::anatempl}.ps &"); |
|
362
|
|
|
|
|
|
|
} |
|
363
|
|
|
|
|
|
|
} # END of gnuplot_combined() |
|
364
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
365
|
|
|
|
|
|
|
sub parse_gnuplot_templ { |
|
366
|
0
|
|
|
0
|
0
|
0
|
my $synsimdataref=shift; |
|
367
|
0
|
|
|
|
|
0
|
my %synsimdata=%{$synsimdataref}; |
|
|
0
|
|
|
|
|
0
|
|
|
368
|
|
|
|
|
|
|
|
|
369
|
1
|
|
|
1
|
|
8
|
no strict; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
942
|
|
|
370
|
|
|
|
|
|
|
|
|
371
|
0
|
|
|
|
|
0
|
foreach my $key (keys %synsimdata){ |
|
372
|
0
|
0
|
|
|
|
0
|
($key=~/^\d*$/)&&next; |
|
373
|
0
|
|
|
|
|
0
|
my $lcname=lc($key); |
|
374
|
0
|
0
|
|
|
|
0
|
if($key=~/^_/) { |
|
375
|
0
|
|
|
|
|
0
|
@{$lcname}=@{$synsimdata{$key}}; |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
376
|
|
|
|
|
|
|
} else { |
|
377
|
0
|
|
|
|
|
0
|
$$lcname=$synsimdata{$key}; |
|
378
|
|
|
|
|
|
|
} |
|
379
|
|
|
|
|
|
|
} |
|
380
|
0
|
|
|
|
|
0
|
my $normvarval=$synsimdata{$normvar}[0]; |
|
381
|
|
|
|
|
|
|
|
|
382
|
|
|
|
|
|
|
#plot templates can be either |
|
383
|
|
|
|
|
|
|
#SIMPTYPE.PLOTTEMPL, stored under TEMPLATES or TEMPLATES/SYMTYPE |
|
384
|
|
|
|
|
|
|
#$dataset.PLOTTEMPL, stored next to $dataset.data |
|
385
|
0
|
|
|
|
|
0
|
my $plot_templ_file="../$datafilename$plottempl"; |
|
386
|
|
|
|
|
|
|
#print "../$datafilename$plottempl\n"; |
|
387
|
0
|
0
|
|
|
|
0
|
if( not -e $plot_templ_file) { |
|
388
|
0
|
|
|
|
|
0
|
$plot_templ_file="../TEMPLATES/$simtempl$plottempl"; |
|
389
|
0
|
0
|
|
|
|
0
|
if( not -e $plot_templ_file) { |
|
390
|
0
|
|
|
|
|
0
|
$plot_templ_file=''; |
|
391
|
|
|
|
|
|
|
} |
|
392
|
|
|
|
|
|
|
} |
|
393
|
|
|
|
|
|
|
#print " plot_templ_file $plot_templ_file\n"; |
|
394
|
|
|
|
|
|
|
|
|
395
|
0
|
|
|
|
|
0
|
my $xcolentry='(\$_XCOL*1):'; |
|
396
|
|
|
|
|
|
|
|
|
397
|
0
|
0
|
0
|
|
|
0
|
if(not exists $synsimdata{XCOL} and not exists $synsimdata{XVAR} and not exists $synsimdata{SWEEPVAR} and ($xcol && ($xcol!~/\d/))){ |
|
|
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
398
|
0
|
|
|
|
|
0
|
$xcolentry=''; |
|
399
|
|
|
|
|
|
|
} |
|
400
|
0
|
|
|
|
|
0
|
my $firstplotline=<<"ENDH"; |
|
401
|
|
|
|
|
|
|
set terminal postscript landscape enhanced color solid "Helvetica" 14 |
|
402
|
|
|
|
|
|
|
set output "${simtempl}-${anatempl}.ps" |
|
403
|
|
|
|
|
|
|
|
|
404
|
|
|
|
|
|
|
$logscale |
|
405
|
|
|
|
|
|
|
|
|
406
|
|
|
|
|
|
|
#set xtics $xtics |
|
407
|
|
|
|
|
|
|
#set mxtics 2 |
|
408
|
|
|
|
|
|
|
set grid xtics ytics mxtics mytics |
|
409
|
|
|
|
|
|
|
|
|
410
|
|
|
|
|
|
|
set key right top box |
|
411
|
|
|
|
|
|
|
set key title "$legendtitle" |
|
412
|
|
|
|
|
|
|
|
|
413
|
|
|
|
|
|
|
set title "$title" "Helvetica,18" |
|
414
|
|
|
|
|
|
|
set xlabel "$xlabel" "Helvetica,16" |
|
415
|
|
|
|
|
|
|
set ylabel "$ylabel" "Helvetica,16" |
|
416
|
|
|
|
|
|
|
|
|
417
|
|
|
|
|
|
|
ENDH |
|
418
|
|
|
|
|
|
|
|
|
419
|
0
|
|
|
|
|
0
|
my $plotlinetempl=q["\'$filename\' using _XCOLENTRY(\$_YCOL/_NORMVAR) title \"$legend\" with _PLOTSTYLE"]; |
|
420
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/_XCOLENTRY/$xcolentry/; |
|
421
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/_NORMVAR/$normvarval/; |
|
422
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/_YCOL/$ycol/; |
|
423
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/_XCOL/$xcol/; |
|
424
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/_PLOTSTYLE/$plotstyle/; |
|
425
|
0
|
|
|
|
|
0
|
my $range=''; |
|
426
|
0
|
0
|
|
|
|
0
|
if($plot_templ_file) { |
|
427
|
0
|
|
|
|
|
0
|
$firstplotline=''; |
|
428
|
0
|
|
|
|
|
0
|
open(PLOTTEMPL,"<$plot_templ_file"); |
|
429
|
|
|
|
|
|
|
|
|
430
|
0
|
|
|
|
|
0
|
while () { |
|
431
|
0
|
0
|
0
|
|
|
0
|
/FILENAME/ && ($plotlinetempl=$_) && last; |
|
432
|
0
|
|
|
|
|
0
|
s/OUTPUT/${simtempl}-${anatempl}/; |
|
433
|
0
|
|
|
|
|
0
|
s/PLOTTITLE/$title/; |
|
434
|
0
|
|
|
|
|
0
|
s/LEGENDTITLE/$legendtitle/; |
|
435
|
0
|
|
|
|
|
0
|
s/XLABEL/$xlabel/; |
|
436
|
0
|
|
|
|
|
0
|
s/YLABEL/$ylabel/; |
|
437
|
0
|
|
|
|
|
0
|
s/XTICS/$xtics/; |
|
438
|
0
|
|
|
|
|
0
|
s/YTICS/$ytics/; |
|
439
|
0
|
|
|
|
|
0
|
s/LOGSCALE/$logscale/; |
|
440
|
0
|
|
|
|
|
0
|
$firstplotline.=$_; |
|
441
|
|
|
|
|
|
|
} |
|
442
|
0
|
|
|
|
|
0
|
chomp($plotlinetempl); |
|
443
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/\$/\\\$/g; |
|
444
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/RESULTSFILENAME/\$filename/g; |
|
445
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/FILENAME/\$filename/g; |
|
446
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/XCOL/$xcol/; |
|
447
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/YCOL/$ycol/; |
|
448
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/NORMVAR/$normvarval/; |
|
449
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/LEGENDENTRY/\$legend/; |
|
450
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/LEGEND/\$legend/; |
|
451
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/PLOTSTYLE/$plotstyle/; |
|
452
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/^plot\s+//; |
|
453
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/\'/\\\'/g; |
|
454
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/\"/\\\"/g; |
|
455
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/XSTART/$xstart/; |
|
456
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/XSTOP/$xstop/; |
|
457
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/YSTART/$ystart/; |
|
458
|
0
|
|
|
|
|
0
|
$plotlinetempl=~s/YSTOP/$ystop/; |
|
459
|
|
|
|
|
|
|
|
|
460
|
|
|
|
|
|
|
|
|
461
|
0
|
0
|
|
|
|
0
|
( $plotlinetempl=~s/(\[[\d\.eE\-\+]*\:[\d\.eE\-\+]*\]\s+)//) && do { |
|
462
|
0
|
|
|
|
|
0
|
$range=$1; |
|
463
|
|
|
|
|
|
|
}; |
|
464
|
0
|
|
|
|
|
0
|
$plotlinetempl='"'.$plotlinetempl.'"'; |
|
465
|
|
|
|
|
|
|
} |
|
466
|
0
|
|
0
|
|
|
0
|
$range||=''; |
|
467
|
|
|
|
|
|
|
|
|
468
|
0
|
|
|
|
|
0
|
return [$firstplotline,$plotlinetempl,$range]; |
|
469
|
|
|
|
|
|
|
|
|
470
|
|
|
|
|
|
|
} # END of parse_gnuplot_templ() |
|
471
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
472
|
|
|
|
|
|
|
sub copy_results { |
|
473
|
1
|
|
|
1
|
|
6
|
use Cwd; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
491
|
|
|
474
|
0
|
|
|
0
|
0
|
0
|
my $workingdir=cwd(); |
|
475
|
0
|
0
|
|
|
|
0
|
if(not(-e "$workingdir/../../Results")) { |
|
476
|
0
|
|
|
|
|
0
|
mkdir "$workingdir/../../Results"; |
|
477
|
|
|
|
|
|
|
} |
|
478
|
0
|
0
|
|
|
|
0
|
if(not(-e "$workingdir/../../Results/$Simulation::Automate::PostProcLib::simtempl")) { |
|
479
|
0
|
|
|
|
|
0
|
mkdir "$workingdir/../../Results/$Simulation::Automate::PostProcLib::simtempl"; |
|
480
|
|
|
|
|
|
|
} |
|
481
|
|
|
|
|
|
|
|
|
482
|
0
|
0
|
|
|
|
0
|
if(not(-e "$workingdir/../../Results/$Simulation::Automate::PostProcLib::simtempl/$Simulation::Automate::PostProcLib::anatempl")) { |
|
483
|
0
|
|
|
|
|
0
|
mkdir "$workingdir/../../Results/$Simulation::Automate::PostProcLib::simtempl/$Simulation::Automate::PostProcLib::dataset"; |
|
484
|
|
|
|
|
|
|
} |
|
485
|
0
|
|
|
|
|
0
|
system("cp ${Simulation::Automate::PostProcLib::simtempl}-${Simulation::Automate::PostProcLib::anatempl}.* $workingdir/../../Results/$Simulation::Automate::PostProcLib::simtempl/$Simulation::Automate::PostProcLib::dataset"); |
|
486
|
|
|
|
|
|
|
|
|
487
|
|
|
|
|
|
|
} #END of copy_results() |
|
488
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
489
|
|
|
|
|
|
|
sub create_legend { |
|
490
|
2
|
|
|
2
|
0
|
8
|
my $title=shift; |
|
491
|
|
|
|
|
|
|
|
|
492
|
2
|
|
|
|
|
4
|
my %make_nice=%{shift(@_)}; |
|
|
2
|
|
|
|
|
62
|
|
|
493
|
|
|
|
|
|
|
|
|
494
|
2
|
|
|
|
|
7
|
$title=~s/\-\-/\-\_MINUS_/g; |
|
495
|
2
|
|
|
|
|
7
|
(my $legendkey,my $legendvalue)=split('-',$title); |
|
496
|
2
|
|
50
|
|
|
21
|
$legendkey||=' '; |
|
497
|
2
|
|
50
|
|
|
16
|
$legendvalue||=' '; |
|
498
|
2
|
50
|
|
|
|
11
|
($legendkey=~/_MINUS_/)&&($legendkey=~s/_MINUS_/\-/g); |
|
499
|
2
|
50
|
|
|
|
11
|
($legendvalue=~/_MINUS_/)&&($legendvalue=~s/_MINUS_/\-/g); |
|
500
|
|
|
|
|
|
|
|
|
501
|
2
|
|
|
|
|
9
|
my %title= ($legendkey=>$legendvalue); |
|
502
|
|
|
|
|
|
|
|
|
503
|
2
|
|
|
|
|
5
|
my $legend=''; |
|
504
|
2
|
|
|
|
|
6
|
my $legendtitle=''; |
|
505
|
2
|
|
|
|
|
15
|
foreach my $key (sort keys %title) { |
|
506
|
2
|
|
33
|
|
|
15
|
my $titlepart=$make_nice{$key}{title}||&make_nice($key); |
|
507
|
2
|
|
|
|
|
8
|
$legendtitle.=','.$titlepart; |
|
508
|
2
|
|
33
|
|
|
55
|
my $legendpart=$make_nice{$key}{$title{$key}}||$title{$key}; |
|
509
|
2
|
|
|
|
|
8
|
$legend.=','.$legendpart; |
|
510
|
|
|
|
|
|
|
} |
|
511
|
2
|
|
|
|
|
15
|
$legend=~s/^,//; |
|
512
|
2
|
|
|
|
|
7
|
$legendtitle=~s/^,//; |
|
513
|
|
|
|
|
|
|
|
|
514
|
2
|
|
|
|
|
17
|
return [$legendtitle,$legend]; |
|
515
|
|
|
|
|
|
|
} |
|
516
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
517
|
|
|
|
|
|
|
sub import_symbols { |
|
518
|
1
|
|
|
1
|
|
6
|
no strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
455
|
|
|
519
|
2
|
|
|
2
|
0
|
46
|
foreach my $name (sort keys %Simulation::Automate::PostProcLib::simdata) { |
|
520
|
80
|
100
|
|
|
|
207
|
($name=~/^\d*$/) && next; |
|
521
|
76
|
|
|
|
|
93
|
my $lcname=lc($name); |
|
522
|
76
|
50
|
|
|
|
147
|
if($name=~/^_/) { |
|
523
|
0
|
|
|
|
|
0
|
@{"Simulation::Automate::PostProcLib::$lcname"}=@{$Simulation::Automate::PostProcLib::simdata{$name}}; |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
524
|
0
|
|
|
|
|
0
|
@{"Simulation::Automate::PostProcessors::$lcname"}=@{$Simulation::Automate::PostProcLib::simdata{$name}}; |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
525
|
0
|
|
|
|
|
0
|
push @Simulation::Automate::PostProcLib::EXPORT,'@'.$lcname; |
|
526
|
|
|
|
|
|
|
} else { |
|
527
|
76
|
|
|
|
|
95
|
${"Simulation::Automate::PostProcLib::$lcname"}=$Simulation::Automate::PostProcLib::simdata{$name}; |
|
|
76
|
|
|
|
|
340
|
|
|
528
|
76
|
|
|
|
|
83
|
${"Simulation::Automate::PostProcessors::$lcname"}=$Simulation::Automate::PostProcLib::simdata{$name}; |
|
|
76
|
|
|
|
|
328
|
|
|
529
|
76
|
|
|
|
|
181
|
push @Simulation::Automate::PostProcLib::EXPORT,'$'.$lcname; |
|
530
|
|
|
|
|
|
|
} |
|
531
|
|
|
|
|
|
|
} |
|
532
|
|
|
|
|
|
|
} |
|
533
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
534
|
|
|
|
|
|
|
sub make_nice { |
|
535
|
4
|
|
|
4
|
0
|
15
|
my $varname=shift; |
|
536
|
4
|
50
|
|
|
|
20
|
if($varname=~/,/){ |
|
537
|
0
|
|
|
|
|
0
|
my @varnames=split(', ',$varname); |
|
538
|
0
|
|
|
|
|
0
|
foreach my $varname (@varnames) { |
|
539
|
0
|
|
|
|
|
0
|
$varname=~s/^_//; |
|
540
|
0
|
|
|
|
|
0
|
$varname=~s/_/ /g; |
|
541
|
0
|
|
|
|
|
0
|
$varname=lc($varname); |
|
542
|
0
|
|
|
|
|
0
|
$varname=~s/^([a-z])/uc($1)/e; |
|
|
0
|
|
|
|
|
0
|
|
|
543
|
|
|
|
|
|
|
} |
|
544
|
0
|
|
|
|
|
0
|
$varname=join(', ',@varnames); |
|
545
|
|
|
|
|
|
|
} else { |
|
546
|
4
|
|
|
|
|
9
|
$varname=~s/^_//; |
|
547
|
4
|
|
|
|
|
6
|
$varname=~s/_/ /g; |
|
548
|
4
|
|
|
|
|
7
|
$varname=lc($varname); |
|
549
|
4
|
|
|
|
|
24
|
$varname=~s/^([a-z])/uc($1)/e; |
|
|
0
|
|
|
|
|
0
|
|
|
550
|
|
|
|
|
|
|
} |
|
551
|
4
|
|
|
|
|
14
|
return $varname; |
|
552
|
|
|
|
|
|
|
} |
|
553
|
|
|
|
|
|
|
#------------------------------------------------------------------------------ |
|
554
|
|
|
|
|
|
|
1; |
|
555
|
|
|
|
|
|
|
#print STDERR "#" x 80,"\n#\t\t\tSynSim simulation automation tool\n#\n#\t\t\t(C) Wim Vanderbauwhede 2002\n#\n","#" x 80,"\n\n Module SynSim::PostProcLib loaded\n\n"; |
|
556
|
|
|
|
|
|
|
|
|
557
|
|
|
|
|
|
|
|