ctioga 1.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/COPYING +340 -0
  2. data/ctioga/bin/ctable +28 -0
  3. data/ctioga/bin/ctioga +37 -0
  4. data/ctioga/doc/ctable.1 +156 -0
  5. data/ctioga/doc/ctioga.1 +2363 -0
  6. data/ctioga/examples/README +46 -0
  7. data/ctioga/examples/ctioga.gnuplot +4 -0
  8. data/ctioga/examples/ctioga_within_tioga.rb +53 -0
  9. data/ctioga/examples/ctiogarc.rb +24 -0
  10. data/ctioga/examples/include_1.rb +15 -0
  11. data/ctioga/examples/noise.dat +100 -0
  12. data/ctioga/examples/noise.rb +13 -0
  13. data/ctioga/examples/trig.csv +100 -0
  14. data/ctioga/examples/trig.dat +100 -0
  15. data/ctioga/examples/trig.rb +14 -0
  16. data/ctioga/examples/trigh.dat +100 -0
  17. data/ctioga/examples/trigh.rb +10 -0
  18. data/ctioga/examples/tutorial +763 -0
  19. data/ctioga/examples/tutorial.sh +269 -0
  20. data/ctioga/tests/README +14 -0
  21. data/ctioga/tests/axes.sh +40 -0
  22. data/ctioga/tests/basic.sh +11 -0
  23. data/ctioga/tests/draw.sh +24 -0
  24. data/ctioga/tests/histograms.sh +14 -0
  25. data/ctioga/tests/insets.sh +41 -0
  26. data/ctioga/tests/layouts.sh +29 -0
  27. data/ctioga/tests/legends.sh +113 -0
  28. data/ctioga/tests/styles.sh +43 -0
  29. data/ctioga/tests/test_style.sh +8 -0
  30. data/ctioga/tests/tests.sh +24 -0
  31. data/ctioga/tests/text_backend.sh +83 -0
  32. data/ctioga/tests/tioga_defaults.rb +18 -0
  33. data/lib/CTioga/axes.rb +904 -0
  34. data/lib/CTioga/backends.rb +88 -0
  35. data/lib/CTioga/boundaries.rb +224 -0
  36. data/lib/CTioga/ctable.rb +134 -0
  37. data/lib/CTioga/curve_style.rb +246 -0
  38. data/lib/CTioga/debug.rb +199 -0
  39. data/lib/CTioga/dimension.rb +133 -0
  40. data/lib/CTioga/elements.rb +17 -0
  41. data/lib/CTioga/elements/base.rb +84 -0
  42. data/lib/CTioga/elements/containers.rb +578 -0
  43. data/lib/CTioga/elements/curves.rb +368 -0
  44. data/lib/CTioga/elements/tioga_primitives.rb +440 -0
  45. data/lib/CTioga/layout.rb +595 -0
  46. data/lib/CTioga/legends.rb +29 -0
  47. data/lib/CTioga/legends/cmdline.rb +187 -0
  48. data/lib/CTioga/legends/item.rb +164 -0
  49. data/lib/CTioga/legends/style.rb +257 -0
  50. data/lib/CTioga/log.rb +73 -0
  51. data/lib/CTioga/movingarrays.rb +131 -0
  52. data/lib/CTioga/partition.rb +271 -0
  53. data/lib/CTioga/plot_style.rb +230 -0
  54. data/lib/CTioga/plotmaker.rb +1677 -0
  55. data/lib/CTioga/shortcuts.rb +69 -0
  56. data/lib/CTioga/structures.rb +82 -0
  57. data/lib/CTioga/styles.rb +140 -0
  58. data/lib/CTioga/themes.rb +581 -0
  59. data/lib/CTioga/themes/classical.rb +82 -0
  60. data/lib/CTioga/themes/demo.rb +63 -0
  61. data/lib/CTioga/themes/fits.rb +91 -0
  62. data/lib/CTioga/themes/mono.rb +33 -0
  63. data/lib/CTioga/tioga.rb +32 -0
  64. data/lib/CTioga/utils.rb +173 -0
  65. data/lib/MetaBuilder/Parameters/dates.rb +38 -0
  66. data/lib/MetaBuilder/Parameters/lists.rb +132 -0
  67. data/lib/MetaBuilder/Parameters/numbers.rb +69 -0
  68. data/lib/MetaBuilder/Parameters/strings.rb +86 -0
  69. data/lib/MetaBuilder/Parameters/styles.rb +75 -0
  70. data/lib/MetaBuilder/Qt4/Parameters/dates.rb +51 -0
  71. data/lib/MetaBuilder/Qt4/Parameters/numbers.rb +65 -0
  72. data/lib/MetaBuilder/Qt4/Parameters/strings.rb +106 -0
  73. data/lib/MetaBuilder/Qt4/parameter.rb +172 -0
  74. data/lib/MetaBuilder/Qt4/parameters.rb +9 -0
  75. data/lib/MetaBuilder/descriptions.rb +603 -0
  76. data/lib/MetaBuilder/factory.rb +101 -0
  77. data/lib/MetaBuilder/group.rb +57 -0
  78. data/lib/MetaBuilder/metabuilder.rb +10 -0
  79. data/lib/MetaBuilder/parameter.rb +374 -0
  80. data/lib/MetaBuilder/parameters.rb +11 -0
  81. data/lib/MetaBuilder/qt4.rb +8 -0
  82. data/lib/SciYAG/Backends/backend.rb +379 -0
  83. data/lib/SciYAG/Backends/binner.rb +168 -0
  84. data/lib/SciYAG/Backends/cache.rb +102 -0
  85. data/lib/SciYAG/Backends/dataset.rb +158 -0
  86. data/lib/SciYAG/Backends/descriptions.rb +469 -0
  87. data/lib/SciYAG/Backends/filters.rb +25 -0
  88. data/lib/SciYAG/Backends/filters/average.rb +134 -0
  89. data/lib/SciYAG/Backends/filters/cumulate.rb +37 -0
  90. data/lib/SciYAG/Backends/filters/filter.rb +70 -0
  91. data/lib/SciYAG/Backends/filters/norm.rb +39 -0
  92. data/lib/SciYAG/Backends/filters/smooth.rb +63 -0
  93. data/lib/SciYAG/Backends/filters/sort.rb +43 -0
  94. data/lib/SciYAG/Backends/filters/strip.rb +34 -0
  95. data/lib/SciYAG/Backends/filters/trim.rb +64 -0
  96. data/lib/SciYAG/Backends/gnuplot.rb +131 -0
  97. data/lib/SciYAG/Backends/math.rb +108 -0
  98. data/lib/SciYAG/Backends/mdb.rb +462 -0
  99. data/lib/SciYAG/Backends/multitext.rb +96 -0
  100. data/lib/SciYAG/Backends/source.rb +64 -0
  101. data/lib/SciYAG/Backends/text.rb +339 -0
  102. data/lib/SciYAG/backends.rb +16 -0
  103. metadata +191 -0
@@ -0,0 +1,25 @@
1
+ # filters.rb : include file for filters
2
+ # Copyright (C) 2007 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ require 'SciYAG/Backends/filters/filter'
19
+ require 'SciYAG/Backends/filters/smooth'
20
+ require 'SciYAG/Backends/filters/average'
21
+ require 'SciYAG/Backends/filters/sort'
22
+ require 'SciYAG/Backends/filters/trim'
23
+ require 'SciYAG/Backends/filters/cumulate'
24
+ require 'SciYAG/Backends/filters/norm'
25
+ require 'SciYAG/Backends/filters/strip'
@@ -0,0 +1,134 @@
1
+ # smooth.rb : A simple averageing filter
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # A filter that sorts data and then averages the Y values of all the
23
+ # elements which have the same X value.
24
+ class AverageDupFilter < Filter
25
+ include Dobjects
26
+
27
+ describe "avgdup", "Average duplicates",
28
+ "Sorts the points according to the X values and average successive "+
29
+ "points with identical X values"
30
+
31
+ def initialize
32
+ end
33
+
34
+ # There you go: a simple sorting/averaging filter.
35
+ def apply(f)
36
+ h = {}
37
+ for x,y in f
38
+ if h.key? x
39
+ h[x] << y
40
+ else
41
+ h[x] = [y]
42
+ end
43
+ end
44
+
45
+ nx = Dvector.new
46
+ ny = Dvector.new
47
+ for x in h.keys.sort
48
+ nx << x
49
+ y = 0
50
+ for a in h[x]
51
+ y += a
52
+ end
53
+ y/= h[x].size
54
+ ny << y
55
+ end
56
+ return Function.new(nx,ny)
57
+ end
58
+
59
+ # We simply replace the old vectors by the new ones.
60
+ def apply!(f)
61
+ new_f = apply(f)
62
+ f.x.replace(new_f.x)
63
+ f.y.replace(new_f.y)
64
+ end
65
+ end
66
+
67
+ class StandardDeviationFilter < Filter
68
+ include Dobjects
69
+
70
+ describe "stddev", "Compute standard deviation",
71
+ "Averages successive elements with the same X value and compute standard deviation"
72
+
73
+ def initialize
74
+ end
75
+
76
+ def apply(f)
77
+ last_x = nil
78
+ current_y = []
79
+ x_values = Dvector.new
80
+ y_values = []
81
+ f.x.size.times do |i|
82
+ xval = f.x[i]
83
+ if (last_x && xval == last_x)
84
+ current_y << f.y[i]
85
+ else
86
+ if last_x
87
+ y_values << current_y
88
+ x_values << last_x
89
+ end
90
+ current_y = [f.y[i]]
91
+ last_x = f.x[i]
92
+ end
93
+ end
94
+ if last_x
95
+ y_values << current_y
96
+ x_values << last_x
97
+ end
98
+
99
+ target_y = Dvector.new(x_values.size)
100
+ ymin = target_y.dup
101
+ ymax = target_y.dup
102
+ x_values.size.times do |i|
103
+ sum = 0.0
104
+ sq_sum = 0.0
105
+ for y in y_values[i]
106
+ sum += y
107
+ sq_sum += y**2
108
+ end
109
+ nb = y_values[i].size
110
+ target_y[i] = sum/nb
111
+ stddev = Math::sqrt((sq_sum/nb) - target_y[i]**2)
112
+ ymin[i] = target_y[i] - stddev
113
+ ymax[i] = target_y[i] + stddev
114
+ end
115
+
116
+ errors = f.errors.dup.merge!({:ymin => ymin, :ymax => ymax,
117
+ :x => x_values, :y => target_y})
118
+
119
+ return DataSet2D.new(f.creation_context,
120
+ Function.new(x_values, target_y),
121
+ errors, f.meta_data)
122
+ end
123
+
124
+ # We simply replace the old vectors by the new ones.
125
+ def apply!(f)
126
+ new_f = apply(f)
127
+ f.x.replace(new_f.x)
128
+ f.y.replace(new_f.y)
129
+ f.errors = new_f.errors
130
+ end
131
+ end
132
+
133
+ end
134
+ end
@@ -0,0 +1,37 @@
1
+ # cumulate.rb : A simple cumulative filter
2
+ # Copyright (C) 2007 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # Removes a given ratio of points
23
+ class CumulateFilter < Filter
24
+ include Dobjects
25
+
26
+ describe "cumulate", "Cumulate", "Cumulate the Y values of the points"
27
+
28
+ def apply!(f)
29
+ y = 0
30
+ f.y.size.times do |i|
31
+ y += f.y[i]
32
+ f.y[i] = y
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,70 @@
1
+ # filter.rb : The base class for filters
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+
19
+ module SciYAG
20
+
21
+ module Backends
22
+
23
+ # The base class for filters. Just an interface, in the java meaning of
24
+ # the term. A filter just provides a function to apply itself.
25
+ class Filter
26
+ # Import the main description functions into the appropriate
27
+ # namespaces
28
+ extend Descriptions::DescriptionExtend
29
+ include Descriptions::DescriptionInclude
30
+
31
+
32
+ def initialize
33
+ end
34
+
35
+ # Creates a description object with the given texts and associates
36
+ # it with the class. To be used in Filter subclasses, simply this way:
37
+ #
38
+ # describe "biniou", "Biniou filter", "A filter to take out Binious"
39
+ #
40
+ # Please remember also that if you don't set a description for
41
+ # your Filter, it will most likely be of no use to anyone...
42
+
43
+ def Filter.describe(name, longname, desc)
44
+ d = FilterDescription.new(self,name, longname, desc)
45
+ set_description(d)
46
+ register_description(d)
47
+ end
48
+
49
+ # Gets a Function (or assimilate ?) and applies the filter on them.
50
+ # The functions *should not modify any data in ary*.
51
+ # By default, the mechanism is to make a copy of the data and apply
52
+ # apply! on it.
53
+ def apply(a)
54
+ f = Dobjects::Function.new(a.x.dup, a.y.dup)
55
+ apply!(f)
56
+ return f
57
+ end
58
+
59
+ # This version modifies directly the Function inside the +f+.
60
+ def apply!(func)
61
+ return func
62
+ end
63
+ end
64
+
65
+ # Specializes Descriptions for filters
66
+ class FilterDescription < Descriptions::Description
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,39 @@
1
+ # norm.rb : normalizing data to 1
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # A filter that sorts data according to their X values.
23
+ class NormalizeFilter < Filter
24
+ include Dobjects
25
+
26
+ describe "norm", "Normalize",
27
+ "Normalize so that maximum absolute value is 1 " +
28
+ "(keeping the original sign)"
29
+
30
+ def initialize
31
+ end
32
+
33
+ def apply!(f)
34
+ y_abs_max = Dvector[f.y.min.abs, f.y.max.abs].max
35
+ f.y.div!(y_abs_max)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,63 @@
1
+ # smooth.rb : A simple averageing filter
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # A simple gaussian filter. You'd better give it an odd number.
23
+ class SmoothFilter < Filter
24
+ include Dobjects
25
+
26
+ describe "smooth", "Smooth", "Simple gaussian-like convolution filter"
27
+
28
+ init_param 'nb', "Number", Integer,
29
+ "The number of points over which to average"
30
+
31
+ def initialize(nb)
32
+ nb = nb.to_i
33
+ if nb < 2
34
+ warn "Invalid parameter nb #{nb}, using 5"
35
+ nb = 5
36
+ end
37
+ # initializes to binomial coefficients
38
+ @kernel = Dvector.new(nb) { |i|
39
+ SmoothFilter.cnk(nb,i)
40
+ }
41
+ @mid = nb - nb/2 - 1
42
+ end
43
+
44
+
45
+ # Binomial coefficients.
46
+ def SmoothFilter.cnk(n,k)
47
+ res = 1.0
48
+ n.downto(n - k) { |i| res *= i}
49
+ k.downto(1) {|i| res = res/i }
50
+ return res
51
+ end
52
+
53
+ # There you go: a simple averageing filter.
54
+ def apply(f)
55
+ return Function.new(f.x, f.y.convolve(@kernel, @mid))
56
+ end
57
+
58
+ def apply!(f)
59
+ f.y.replace(f.y.convolve(@kernel, @mid))
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,43 @@
1
+ # sort.rb : A simple sorting filter
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # A filter that sorts data according to their X values.
23
+ class XsortFilter < Filter
24
+ include Dobjects
25
+
26
+ describe "sort", "Sort", "Sorts the points according to the X values"
27
+
28
+ def initialize
29
+ end
30
+
31
+ # There you go: a simple averageing filter.
32
+ def apply(f)
33
+ a = Function.new(f.x.dup, f.y.dup)
34
+ a.sort
35
+ return a
36
+ end
37
+
38
+ def apply!(f)
39
+ f.sort!
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,34 @@
1
+ # strip.rb : remove all NaN before processing any further
2
+ # Copyright (C) 2006 Vincent Fourmond
3
+
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ module SciYAG
19
+
20
+ module Backends
21
+
22
+ # A filter that sorts data according to their X values.
23
+ class StripNanFilter < Filter
24
+ include Dobjects
25
+
26
+ describe "strip", "Strip",
27
+ "Removes all NaN from the input"
28
+
29
+ def apply!(f)
30
+ f.strip_nan
31
+ end
32
+ end
33
+ end
34
+ end